Обновить
128K+

.NET *

Хаб со знаниями про .NET

119,86
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Как найти ленивого в команде разработки?

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели3.8K

Совместная разработка, и как найти лентяя в команде. История о том как я пришёл к созданию плагина для OpenSource.

Если у Вас закрались в голову мысли, что один из персонажей не работает, я думаю этот инструмент будет для Вас полезен.

А чтобы не читать всю статью инструменты можно быстро посмотреть

JETBRAINS MARKETPLACE

VISUAL STUDIO MARKETPLACE

Найти лентяя

Новости

Бенчмаркая ключи Dictionary: забыл IEquatable — получил ×5 и 96 байт на каждый поиск

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.8K

Структура в роли ключа Dictionary — частый случай. Забыл IEquatable — и каждый TryGetValue в 4,4–5,7 раза медленнее, плюс 96 байт в куче на каждый поиск.

Проверил на четырёх машинах и трёх рантаймах, снял дизасм FindValue и разобрал, откуда берутся ровно три упаковки, почему override Equals не спасает и при чём тут хэш record struct. Сам рантайм этот разрыв не закроет — и это не баг.

Читать далее

Ленивый LINQ: разбираем yield и ленивые вычисления по кирпичикам. Часть 2

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели9.2K

В первой части мы успешно вскрыли чёрный ящик LINQ: написали Where вручную, разобрались, как компилятор превращает yield return в конечные автоматы, и посмотрели на методы с частичной буферизацией. Но LINQ был бы не собой, если бы на этом всё закончилось.

Во второй части переходим к «тяжёлой артиллерии» — OrderBy, GroupBy и Join. Эти методы вынуждены нарушить главный завет ленивых вычислений: они материализуют данные в памяти, прежде чем отдать хоть один элемент. Но как именно?

После этой статьи LINQ перестанет быть чёрным ящиком: вы будете точно понимать, сколько памяти съест каждая цепочка методов и в каком порядке следует вызывать эту цепочку.

Читать далее

AI‑тренер по CS2 на DeepSeek: где LLM выдумывает и почему семь недель стоили $1,45

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.6K

Всем привет. Я много лет играю в Counter-Strike и тренируюсь, как большинство: захожу в Deathmatch «размяться», играю три катки, тильтую, выхожу. Сервисы статистики при этом исправно сообщают, что у меня просела точность и выросло время реакции. Спасибо, а делать-то что?

Весной я решил собрать себе тренера сам. Сразу пара слов для контекста: я самоучка, в команде никогда не работал, основной опыт — десктопные утилиты и автоматизация, из веба до этого были только админки под собственные инструменты. В CS тоже звёзд с неба не хватаю, Premier в районе трёх тысяч, на FACEIT вообще первый уровень. Так что история будет не про успешный успех, а про то, где я наступил на грабли и что из этого вынес.

Сам сайт делает вот что: подтягивает историю матчей, отдаёт агрегированную статистику LLM, а та разбирает сильные и слабые места и составляет недельный план тренировок, с конкретными картами, режимами и минутами. Отметил выполненное, сыграл новые матчи — план подстроился.

Проект мой, ссылка будет одна и в конце. Статья состоит из трёх частей: сколько это всё стоит в токенах, где модель выдумывает и как я это ловлю кодом, ну и подводные камни DeepSeek API и связки EF Core + SQLite.

Читать далее

Pure.DI vs Autofac: генерация кода или классический DI-контейнер?

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели5.2K

Если искать в интернете «мощный DI-контейнер для .NET», почти в каждом списке встретится Autofac. У него заслуженная репутация зрелого и функционального контейнера. На этом фоне Pure.DI иногда воспринимают как узкоспециализированный генератор, который выигрывает в скорости, но должен уступать классическому DI-контейнеру по возможностям.

Так ли это на самом деле?

EF Core миграции в проде: как Database.Migrate() на старте может превратить релиз в тревожную кнопку

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели9.6K

Сегодня про EF Core migrations и один очень удобный вызов, который локально экономит время, а в production может связать старт приложения, DDL-блокировки и rollback в одну неприятную историю.

Читать далее

Навайбкодил до продакшена

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели7.6K

Недавно я опубликовал в Google Play приложение 99.9% исходного кода которого написано AI. Это не просто "поделка на коленке за выходные": нативное (Kotlin), больше 50 экранов, сложная анимация, мультиязычность, расширяемое.

Этого удалось добиться через очень подробную спецификацию. Каждый экран был отрисован дизайнером, для каждой кнопки есть описание какие API дернуть. Стоило ли оно того? Давайте посмотрим на цифры.

Читать далее

С телефона в Альпах в Microsoft Store за две недели: нативный GUI для PostgreSQL через облачный Claude Code

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели7.8K

10 лет в .NET, отпуск в Альпах и pgAdmin, который меня достал.

Начало июля, горный воздух, а в голове рабочая фрустрация. Ну сколько можно ждать по 30 секунд, пока pgAdmin разродится ради одного короткого запроса? Из инструментов с собой только смартфон и лимиты Claude Code. Challenge accepted.

За выходные, целиком с телефона, не написав руками ни единой строчки кода, я собрал первую рабочую версию нативного GUI для PostgreSQL. Дальше две недели вечернего кодинга, 17 релизов, и проект уже в Microsoft Store.

Встречайте: NativeAOT, взлетает за ~100 мс, весит всего 19 МБ, ноль трекеров, лицензия MIT.

Написал об этом подробный пост. Без лишней воды и успешного успеха рассказываю: как агент тащил разработку (от кода до дебага в песочнице) и где ему всё-таки нужна была менторская рука, какие грабли подкинул NativeAOT и как бесплатно выкатиться в Microsoft Store без покупки дорогого Authenticode-сертификата.

Заходите почитать, а в конце проголосуйте в опросе, какую фичу пилить следующей: ER-диаграммы, визуальный дифф EXPLAIN, UI для бэкапов или локальный AI?

Читать далее

Ночной джоб, который сам нарезает партиции: cron, SQL-функция и сплиттер

Уровень сложностиСложный
Время на прочтение11 мин
Охват и читатели9.6K

Есть таблица GPS-точек. Транспорт шлёт координаты каждые несколько секунд, за сутки набегают миллионы строк, и таблица секционирована по времени. Значит, кто-то должен заранее создавать партицию на завтра и отцеплять партиции старше девяноста дней. Иначе в одну прекрасную ночь вставка упадёт с no partition of relation "gps_points" found for row, и это будет ровно в тот момент, когда никто не смотрит.

Читать далее

Ленивый LINQ: разбираем yield и ленивые вычисления по кирпичикам

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели9.1K

Каждый C#‑разработчик писал numbers.Where(x => x > 10).Select(x => x * 2) — и удивлялся, узнав, что эта строчка ничего не вычисляет. Цепочка спит, пока мы не начнём перебирать результат.

За этим стоит конкретный механизм — отложенные вычисления, а в его основе лежит обычная фича языка: yield. Разбираем, как устроены ленивые методы LINQ изнутри — от ручной реализации Where без yield до того, во что этот yield разворачивается компилятором.

А вы точно знаете, что происходит под капотом каждый раз, когда пишете .Where(...).Select(...)?

К статье приложен репозиторий с полной реализацией.

Читать далее

Я превратил Slack в интерактивную консоль для работающего .NET-приложения

Время на прочтение5 мин
Охват и читатели7.2K

Автор объясняет, как он использовал скрипты Roslyn и режим сокетов Slack для проверки и отладки запущенного приложения и взаимодействия с ним. 

Читать далее

Бенчмаркая регресс LINQ: обещали −19%, на четырёх машинах намерил +31%

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели11K

Уважаемые читатели, в этой статье я хочу рассказать о проверке обещанного регресса LINQ в .NET 10 — и представить свои выводы.

В dotnet/runtime с лета висит issue #117717: после перехода на .NET 10 метод с First(предикат) просел к девятке — у автора issue на Intel 13-го поколения до 19%, у Энди Эйерса из JIT-команды на Zen 4 порядка 10%. Причину команда назвала сама: связка PGO и инлайнинга, делегат предиката перестал инлайниться.

Решение тоже озвучили: в десятке чинить не будем — сломаем другое, переносим в .NET 11. Был частичный фикс (PR #117816), после которого issue переоткрыли как #119425. Десятка при этом LTS, и в комментах закономерный вопрос: обновляться на десятку или ждать одиннадцатую.

Читать далее

Бенчмаркая Sum: ускорил циклом — замедлил в ×4,7

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели10K

Уважаемые читатели, в этой статье я хочу рассказать о том, что происходит внутри values.Sum() в современном .NET — там нашлись векторные инструкции, контроль переполнения и список процессоров, которым рантайм намеренно ограничивает ширину вектора, — и представить свои выводы.

В прошлых статьях серии самописные циклы уже проигрывали BCL в поиске по строке, JIT сам выкидывал проверки границ, а foreach прятал аллокации. Тут случай интереснее: values.Sum() — это LINQ, который при оптимизации первым делом меняют на цикл.

Читать далее

Ближайшие события

FOG Prime: локальный помощник для стабильной работы Discord и YouTube в Windows

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели11K

Статья представляет собой практическое пособие по изучению FOG Prime и основ сетевого взаимодействия. На примере проекта рассматриваются работа Discord и YouTube, различия между TCP и UDP, роль DNS, TLS и QUIC, автоматический подбор сетевых профилей и проверка соединения. Материал написан простым языком и подойдёт начинающим пользователям и разработчикам.

Читать далее

Новое в Pure.DI: union types, генерация интерфейсов и DI без аллокаций

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели8.5K

Pure.DI — это генератор кода для внедрения зависимостей (Dependency Injection), который работает на этапе компиляции. Pure.DI развивает идею «чистого DI»: вместо контейнера и рефлексии вы получаете обычный C#‑код, который создаёт композиции объектов. В этой статье — новые возможности из релизов 2.3.5–2.5.1: от union types в роли DI‑контрактов до сценариев внедрения зависимостей без лишних аллокаций.

Читать далее

redb.Route — коннектор Amazon SQS + SNS, at-least-once и Publish-Subscribe через SNS→SQS. Уходим от MassTransit

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели10K

series redb ecosystem

Про Kafka и RabbitMQ в этой серии уже было. Теперь — Amazon SQS, и вместе с ним в одном пакете SNS: два транспорта, потому что в мире AWS они ходят парой. Коннектор redb.Route.Sqs — поверх нативного AWS SDK for .NET v4 (AWSSDK.SQSAWSSDK.SimpleNotificationService), но писать вам придётся не «клиент», а маршруты, где вся очередь задаётся одной строкой-URI:

Читать далее

Бенчмаркая поиск по строке: самописные циклы проигрывают от ×14 до ×154

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели14K

Уважаемые читатели, в этой статье я хочу рассказать про поиск по строке и представить свои выводы. Началось с оптимизации: сравнил поиск символа циклом со string.IndexOf — и получил разницу в разы. Заодно выяснилось, что серверный Xeon с AVX-512 в этой задаче медленнее игрового десктопа с AVX2. Ниже разбор обоих фактов с дизасмом и замерами.

Будет четыре истории, и в каждой — вопрос, на который я искал ответ:

Читать далее

Как я превратил Real‑ESRGAN и FFmpeg в потоковый Windows‑апскейлер без гигантских временных папок

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели7.7K

Апскейлинг одного изображения через Real-ESRGAN обычно не вызывает особых проблем: выбираем модель, запускаем обработку и получаем результат. Но при работе с видео и большими наборами файлов быстро появляются дополнительные задачи: декодирование и сборка видео, очередь рендера, выбор видеокарты, обработка ошибок, восстановление прерванных заданий, зависимости вроде FFmpeg и понятный интерфейс для всего этого.

Мне хотелось получить обычное Windows-приложение, в которое можно перетащить видео, изображения или целую папку, выбрать параметры и оставить обработку выполняться без ручной работы с консольными командами.

Так появился UltraFrame AI — бесплатное приложение с открытым исходным кодом для пакетного апскейлинга видео и изображений с помощью Real-ESRGAN.

Читать далее

redb.Identity: OAuth 2.1 / OpenID сервер на .NET, где протокол отделён от транспорта, по шине или вообще без сети

Уровень сложностиСложный
Время на прочтение59 мин
Охват и читатели8.9K

Есть три привычных способа сделать OAuth/OIDC в .NET, и каждый чем-то неудобен.

Первый — ASP.NET-привязанные решения (Duende IdentityServer, ASP.NET Identity, сэмплы OpenIddict). Мощно, но каждый эндпоинт — это HTTP-middleware. Захотелось дёрнуть token из воркера или из консьюмера шины? Поднимай HTTP-листенер и ходи через loopback. Хочешь протестировать конвейер выдачи токена в изоляции? Готовь WebApplicationFactory.

Второй — готовые IAM-платформы (Keycloak, Auth0, Okta). Богато по фичам, но это отдельный сервис со своим рантаймом, своей админкой, своей базой, своей моделью конфигурации и своим деплоем. Мультиарендно — да, встраиваемо — нет.

Третий — написать своё. И в третий раз за десятилетие переизобрести Code+PKCE, ротацию refresh-токенов, хранение согласий, отзыв сессий, защиту от replay в MFA, ротацию JWKS, шаринг ключей между репликами и backchannel-logout по RFC 8417.

Читать далее

Бенчмаркая проверки границ: фикс, который шёл 8  лет, и проверка, которая жива до сих пор

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.3K

Уважаемые читатели, в этой статье я хочу рассказать о проверках границ массива и представить свои выводы. Каждое обращение arr[i] обязано проверить индекс, иначе IndexOutOfRangeException — а JIT старается эти проверки убирать, когда может доказать, что выход за границы невозможен. Я взял несколько обычных циклов и посмотрел в машинный код на .net 8, 9, 10 и 11 одновременно. Результат разложился по версиям так, как я не ожидал.

Будет три истории:

Читать далее
1
23 ...