es
Feedback
C# 1001 notes

C# 1001 notes

Ir al canal en Telegram

Регулярные короткие заметки по C# и .NET. Просто о сложном для каждого. admin - @haarrp

Mostrar más
6 541
Suscriptores
+224 horas
+47 días
+430 días
Atraer Suscriptores
junio '26
junio '26
+11
en 0 canales
mayo '26
+67
en 0 canales
Get PRO
abril '26
+66
en 0 canales
Get PRO
marzo '26
+57
en 0 canales
Get PRO
febrero '26
+138
en 0 canales
Get PRO
enero '26
+91
en 1 canales
Get PRO
diciembre '25
+85
en 0 canales
Get PRO
noviembre '25
+132
en 3 canales
Get PRO
octubre '25
+87
en 1 canales
Get PRO
septiembre '25
+101
en 4 canales
Get PRO
agosto '25
+81
en 0 canales
Get PRO
julio '25
+80
en 0 canales
Get PRO
junio '25
+83
en 0 canales
Get PRO
mayo '25
+60
en 0 canales
Get PRO
abril '25
+80
en 0 canales
Get PRO
marzo '25
+107
en 0 canales
Get PRO
febrero '25
+105
en 0 canales
Get PRO
enero '25
+169
en 0 canales
Get PRO
diciembre '24
+202
en 1 canales
Get PRO
noviembre '24
+203
en 2 canales
Get PRO
octubre '24
+364
en 1 canales
Get PRO
septiembre '24
+241
en 0 canales
Get PRO
agosto '24
+262
en 1 canales
Get PRO
julio '24
+168
en 0 canales
Get PRO
junio '24
+398
en 2 canales
Get PRO
mayo '24
+379
en 35 canales
Get PRO
abril '24
+304
en 43 canales
Get PRO
marzo '24
+314
en 20 canales
Get PRO
febrero '24
+281
en 1 canales
Get PRO
enero '24
+572
en 45 canales
Get PRO
diciembre '23
+941
en 48 canales
Get PRO
noviembre '23
+655
en 2 canales
Get PRO
octubre '23
+61
en 0 canales
Get PRO
septiembre '23
+80
en 0 canales
Get PRO
agosto '23
+507
en 0 canales
Get PRO
julio '23
+487
en 0 canales
Get PRO
junio '23
+88
en 0 canales
Get PRO
mayo '23
+569
en 0 canales
Get PRO
abril '23
+21
en 0 canales
Get PRO
marzo '23
+28
en 0 canales
Get PRO
febrero '23
+23
en 0 canales
Get PRO
enero '23
+28
en 0 canales
Get PRO
diciembre '22
+32
en 0 canales
Get PRO
noviembre '22
+31
en 0 canales
Get PRO
octubre '22
+40
en 0 canales
Get PRO
septiembre '22
+28
en 0 canales
Get PRO
agosto '22
+43
en 0 canales
Get PRO
julio '22
+321
en 0 canales
Get PRO
junio '22
+41
en 0 canales
Get PRO
mayo '22
+37
en 0 canales
Get PRO
abril '22
+180
en 0 canales
Get PRO
marzo '220
en 0 canales
Get PRO
febrero '220
en 0 canales
Get PRO
enero '220
en 0 canales
Get PRO
diciembre '210
en 0 canales
Get PRO
noviembre '210
en 0 canales
Get PRO
octubre '210
en 0 canales
Get PRO
septiembre '210
en 0 canales
Get PRO
agosto '210
en 0 canales
Get PRO
julio '210
en 0 canales
Get PRO
junio '210
en 0 canales
Get PRO
mayo '210
en 0 canales
Get PRO
abril '21
+1
en 0 canales
Get PRO
marzo '21
+45
en 0 canales
Get PRO
febrero '21
+54
en 0 canales
Get PRO
enero '21
+42
en 0 canales
Get PRO
diciembre '20
+1 304
en 0 canales
Fecha
Crecimiento de Suscriptores
Menciones
Canales
04 junio0
03 junio+4
02 junio+5
01 junio+2
Publicaciones del Canal
✔️ Одна строчка .Result роняет ваш ASP.NET Core при CPU 8 %: разбор hill-climbing в .NET 9 TL;DR. Один foo.GetAsync().Result
✔️ Одна строчка .Result роняет ваш ASP.NET Core при CPU 8 %: разбор hill-climbing в .NET 9 TL;DR. Один foo.GetAsync().Result внутри middleware превращает ASP.NET Core, державший 50k RPS на p99 = 40 мс, в сервис на 12k RPS с p99 = 4 с при CPU 8 %. Виноват не блокирующий вызов сам по себе. Виноват hill-climbing: фидбэк-луп в ThreadPool, внутри которого живёт дискретное преобразование Фурье. Разбираемся по исходникам CoreCLR, как это работает, воспроизводим эффект на ~80 строках кода и показываем, почему SetMinThreads это не лечение, а анестезия. https://habr.com/ru/articles/1040804/

2
🖥 Сервисы крутятся. Прод вроде живой. Но когда тимлид спрашивает: «почему здесь лучше ValueTask, а не Task?» или «как GC пов
🖥 Сервисы крутятся. Прод вроде живой. Но когда тимлид спрашивает: «почему здесь лучше ValueTask, а не Task?» или «как GC поведёт себя под нагрузкой?» - ты начинаешь плыть. И дело не в том, что ты плохо пишешь код. Просто большинство курсов заканчиваются ровно там, где начинается настоящий .NET. Этот курс про то, что обычно остаётся под капотом: - CLR - JIT - GC - Span - async state machine - Source Generators - lock-free подходы - OpenTelemetry - дампы в проде На практике разбираем, как .NET реально работает внутри: что происходит с кодом после компиляции, как память живёт под нагрузкой, почему async иногда помогает, а иногда ломает производительность, как читать проблемы по дампам и метрикам, а не гадать по логам. Если хочешь дойти до уровня, где система для тебя не чёрный ящик, а инструмент, который ты понимаешь до IL, - велкам. Сейчас на stepik доступна скидка 55%: https://stepik.org/a/288694
887
3
⚡️ Machine Learning Roadmap 2025: большая карта входа в ML без сказок про “нейросети за месяц Большой русскоязычный roadmap п
⚡️ Machine Learning Roadmap 2025: большая карта входа в ML без сказок про “нейросети за месяц Большой русскоязычный roadmap по машинному обучению: от первого import numpy до LLM, RAG, fine-tuning, AI-агентов и MLOps и даже вабкодинга. Внутри нормальная структура: что учить, в каком порядке, зачем это нужно и что должно получиться на практике после каждого этапа. Roadmap разбит на 7 треков: 1. Фундамент: Python, математика, статистика, инструменты 2. Классический ML: scikit-learn, табличные данные, метрики, валидация 3. Deep Learning: PyTorch, CNN, RNN, training loop 4. LLM и трансформеры: attention, KV-cache, RAG, LoRA, агенты 5. Generative AI: изображения, видео, аудио, мультимодальность 6. MLOps и прод: Docker, Kubernetes, CI/CD, monitoring, serving 7. Специализация: CV, NLP, RecSys, RL, Safety Roadmap не продаёт иллюзию “обучил модель - стал ML-инженером”. В реальной работе много времени уходит на данные, метрики, деплой, мониторинг, воспроизводимость и разбор ошибок. Модель - только часть системы. Хорошая мысль из roadmap: LLM не делает джуна сеньором. Она ускоряет того, кто уже понимает базу. Без базы человек просто становится оператором Copilot, который не может объяснить, почему всё сломалось. По времени тоже без сказок: 1. 0-3 месяца: математика, классический ML 2. 3-6 месяцев: Deep Learning и PyTorch 3. 6-12 месяцев: LLM, RAG, fine-tuning, AI-агенты 4. 12+ месяцев: MLOps, прод, масштабирование, специализация Тут же собрано 7 болших бесплатных курсов по машинному обучению, математике и вайбкодингу! Если давно хотели зайти в ML системно, а не прыгать между роликами про ChatGPT, Stable Diffusion и “топ-10 библиотек”, это хороший ориентир. https://github.com/justxor/MachineLearningRoadmap
1 439
4
Форма логина и JWT-токен — ещё не безопасность приложения. На практике ошибки в аутентификации и авторизации становятся причи
Форма логина и JWT-токен — ещё не безопасность приложения. На практике ошибки в аутентификации и авторизации становятся причиной утечек данных, проблем с доступом и уязвимостей, которые сложно обнаружить до выхода системы в production. 26 мая в 20:00 МСК приглашаем вас на открытый урок курса «C# ASP.NET Core-разработчик». На занятии разберём, как в ASP.NET Core устроены pipeline, middleware и схемы аутентификации. Покажем, как правильно использовать JWT, cookies, claims, роли и policy-based авторизацию для гибкого и безопасного контроля доступа. Отдельно обсудим типичные ошибки, которые встречаются в production: небезопасное хранение токенов, ошибки настройки схем и проблемы в логике авторизации. Урок будет полезен .NET-разработчикам, которые хотят систематизировать знания по безопасности веб-приложений и увереннее работать с ASP.NET Core в реальных проектах. Регистрация уже открыта: https://otus.pw/tDF66/?erid=2W5zFGbdS73 Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
1 239
5
🖥 C# Roadmap: с нуля до профи Практическое руководство по росту в C#-разработке. Материал собран для тех, кто хочет получить
🖥 C# Roadmap: с нуля до профи Практическое руководство по росту в C#-разработке. Материал собран для тех, кто хочет получить инженерную глубину, а не просто накликать CRUD по туториалам. Здесь последовательность изучения, лучшие практики, ресурсы и трезвый разбор того, как работать с ИИ-инструментами и оставаться востребованным. https://github.com/Develp10/Csharp_Roadmap/
2 010
6
⏱️ Ускоряем async-код в C#: не просто await, а нормальная параллельность Одна из частых ошибок в C# - писать независимые асинхронные операции так, будто они зависят друг от друга: await GetUserAsync(); await GetOrdersAsync(); await GetRecommendationsAsync(); Выглядит нормально, но по факту это последовательное выполнение. Если каждый запрос занимает примерно 1 секунду, весь блок будет выполняться около 3 секунд. Не потому что async медленный, а потому что мы сами заставили код ждать каждый шаг по очереди. Правильнее запускать независимые операции сразу: var userTask = GetUserAsync(); var ordersTask = GetOrdersAsync(); var recsTask = GetRecommendationsAsync(); await Task.WhenAll(userTask, ordersTask, recsTask); Теперь все запросы стартуют одновременно, а общее время будет примерно равно самому долгому из них. Но есть важный нюанс. Task.WhenAll не делает CPU-код магически параллельным. Он особенно полезен для I/O-bound задач: - запросы в базу - HTTP-вызовы - чтение файлов - обращения к внешним API - независимые операции с сетью И ещё один момент: после WhenAll лучше доставать результаты уже из завершённых задач: var user = await userTask; var orders = await ordersTask; var recs = await recsTask; Так код остаётся читаемым, ошибки нормально пробрасываются, а логика не превращается в кашу. Async/await сам по себе не ускоряет код. Он просто даёт возможность не блокировать поток. Ускорение появляется тогда, когда вы правильно запускаете независимые операции вместе, а не ждёте их по одной.
2 080
7
🖥 На Stepik обновили курс «C# с нуля до профи» Представьте: через четыре месяца вы открываете чужой .NET-проект и читаете ег
🖥 На Stepik обновили курс «C# с нуля до профи» Представьте: через четыре месяца вы открываете чужой .NET-проект и читаете его как книгу. IServiceCollection не вызывает ступора. async Task<IActionResult> пишется на автомате. Вы точно знаете, почему EF Core сгенерировал именно такой SQL - и как переписать запрос, чтобы он летал. Это не фантазия. Это результат после 16 модулей, в которых каждая концепция объясняется через код и закрепляется практикой. ООП, SOLID, LINQ, async/await, DI, EF Core, ASP.NET Core, Docker, Kubernetes - всё, что казалось магией, станет рабочим инструментом. А бонусом - портфолио проектов: от CLI-утилит и REST API до собственного SaaS с multi-tenancy, JWT и деплоем в Kubernetes под TLS. Скидка - 58% доступна 48 часов: https://stepik.org/a/282984/
1 547
8
📌 UUID v7 - это почти ULID, только нативно в .NET Раньше в .NET для идентификаторов чаще всего использовали обычный Guid.New
📌 UUID v7 - это почти ULID, только нативно в .NET Раньше в .NET для идентификаторов чаще всего использовали обычный Guid.NewGuid(). Проблема в том, что классический UUID случайный. Для уникальности это удобно, но для базы данных - не всегда. Когда значения генерируются хаотично, новые записи вставляются в разные части индекса. Отсюда: - больше фрагментации - дороже вставки - чаще перестраиваются страницы индекса - хуже поведение на больших таблицах Поэтому многие разработчики начали использовать ULID. ULID состоит из двух частей: - timestamp - random За счет timestamp такие ID сортируются по времени, а значит база может вставлять новые записи более последовательно. Но начиная с .NET 9 появился встроенный вариант: Guid.CreateVersion7() UUID v7 тоже содержит временную часть, поэтому лучше подходит для индексируемых ключей, чем полностью случайный UUID. Главное отличие: ULID - отдельный формат и часто сторонняя библиотека. UUID v7 - обычный Guid, который уже поддерживается в .NET. Для новых проектов это выглядит как более разумный дефолт: - не Guid.NewGuid() - не отдельный ULID-пакет - а Guid.CreateVersion7() Особенно если Guid используется как primary key в базе.
1 477
9
Что выведет код? using System; class Program { static void Main() { int x = 10; Console.WriteLine(x++ + ++x); } } Правильный
Что выведет код? using System; class Program { static void Main() { int x = 10; Console.WriteLine(x++ + ++x); } } Правильный ответ: 22 Почему: выражение считается слева направо. Сначала x++ возвращает 10, но потом увеличивает x до 11. Затем ++x сначала увеличивает x до 12, потом возвращает 12. В итоге 10 + 12 = 22.
1 968
10
🖥 На Stepik обновили курс «C# с нуля до профи» Представьте: через четыре месяца вы открываете чужой .NET-проект и читаете ег
🖥 На Stepik обновили курс «C# с нуля до профи» Представьте: через четыре месяца вы открываете чужой .NET-проект и читаете его как книгу. IServiceCollection не вызывает ступора. async Task<IActionResult> пишется на автомате. Вы точно знаете, почему EF Core сгенерировал именно такой SQL - и как переписать запрос, чтобы он летал. Это не фантазия. Это результат после 16 модулей, в которых каждая концепция объясняется через код и закрепляется практикой. ООП, SOLID, LINQ, async/await, DI, EF Core, ASP.NET Core, Docker, Kubernetes - всё, что казалось магией, станет рабочим инструментом. А бонусом - портфолио проектов: от CLI-утилит и REST API до собственного SaaS с multi-tenancy, JWT и деплоем в Kubernetes под TLS. Скидка - 58% доступна 48 часов: https://stepik.org/a/282984/
1 502
11
Sin texto...
1 575
12
🚀 ASP.NET Core в 2026: если не знаешь это - ты отстал Одна картинка закрывает почти весь стек, который реально нужен в проде
🚀 ASP.NET Core в 2026: если не знаешь это - ты отстал Одна картинка закрывает почти весь стек, который реально нужен в проде. Без воды и устаревших практик. Сейчас ASP.NET Core уже не про «сделать API», а про систему: от роутинга и DI до очередей, кешей и realtime. Если ты всё ещё пишешь просто контроллеры и думаешь, что этого достаточно - плохие новости. Что важно: • основа осталась той же, но усложнился прод • логирование и мониторинг теперь обязательны • кеш без стратегии уже не спасает • без resilience и retry твой сервис падает при первой же проблеме Отдельно бросается в глаза тренд: минимум магии, максимум контроля ручной mapping вместо AutoMapper явная архитектура вместо «оно само работает» И ещё момент, который многие игнорят: • экосистема вокруг стала важнее самого фреймворка • Redis, Kafka, OpenAPI, gRPC, SignalR - это уже не «дополнительно», это база Если коротко: ASP.NET Core сейчас это не про backend это про сборку полноценной распределённой системы И вопрос уже не в том, знаешь ли ты .NET а в том, умеешь ли ты строить сервисы, которые живут под нагрузкой
1 971
13
⚙️ Почему async void ломает ваш код В C# у async void есть дурная репутация, и не зря. Такой метод не возвращает Task, а значит, его нельзя await-ить, нельзя встроить в пайплайн и невозможно корректно отследить завершение. Исключения из него не ловятся обычным образом — они пробиваются в синхронизационный контекст или в пул потоков, где легко превращаются в необработанные и могут уронить процесс. // Контроллер ASP.NET Core [HttpPost] public async void Create() { await _svc.DoAsync(); } // Исключения мимо pipeline // Библиотека public async void SaveAsync(Item item) { await _repo.Save(item); } // Вызывающему не сконтролировать Правильно — всегда возвращать Task: [HttpPost] public async Task<IActionResult> Create() { await _svc.DoAsync(); return Ok(); } public Task Invoke(HttpContext ctx) => _next(ctx); public Task SaveAsync(Item item) => _repo.Save(item); Единственный сценарий, где async void уместен, — обработчики событий в UI-фреймворках вроде WPF или WinForms, где сигнатура задаётся самим фреймворком. Там приходится мириться, но даже там стоит ловить исключения локально и логировать их.
1 902
14
🚀 Ты всё ещё называешь обёртку над ChatGPT «AI-продуктом»? Пока ты пишешь промпты - рынок уже ушёл дальше. Сейчас выигрывают
🚀 Ты всё ещё называешь обёртку над ChatGPT «AI-продуктом»? Пока ты пишешь промпты - рынок уже ушёл дальше. Сейчас выигрывают не те, кто умеет красиво формулировать запросы, а те, кто строит агентные системы: - принимают решения сами - ходят в API - работают с Postgres и Redis - управляют браузером через Playwright - доводят задачи до результата без человека И вот правда, о которой мало говорят: 90% таких систем умирают между ноутбуком и продом. Работает локально. Ломается в реальности. Нет архитектуры. Нет устойчивости. Нет деплоя. AI Agents Engineering - курс со Stepik, который закрывает этот разрыв. - LangGraph, AutoGen, Computer Use - архитектура агентов, а не «скрипты на коленке» - LLMOps, логирование, стабильность - деплой в Docker и работа в проде 8 модулей, 120+ шагов, всё через практику. На выходе не «сертификат ради галочки», а: - рабочий production-агент - понимание, как строить такие системы с нуля - навыки, за которые уже платят Сейчас самое окно входа. Через полгода это станет базой, а не преимуществом. Скидка 55% действует ещё 48 часов: https://stepik.org/a/276971/
1 171
15
⚙️ Когда Hash Join быстрее Nested Loops Внутри SQL-движка соединение таблиц — это не магия, а конкретный алгоритм. Сравним два подхода к соединению таблиц. Nested Loops работает буквально так, как звучит: берём строку из первой таблицы и ищем совпадения во второй. Если вторая таблица имеет подходящий индекс, поиск по нему будет очень быстрым, и такой алгоритм блестяще справляется с задачей маленькое соединяется с большим. Hash Join подходит там, где Nested Loops захлёбывается. Он сначала строит хэш-таблицу по одной из входных таблиц, а затем пробегается по второй и ищет совпадения через хэш-функцию. Это даёт огромный выигрыш, когда нужно соединить два больших набора данных, и когда индексов для ускорения поиска нет. Цена такого подхода — расход памяти. В итоге — если речь идёт о маленьком наборе строк против большого и есть индекс, Nested Loops окажется быстрее. Но если обе таблицы крупные и индексы не спасают, Hash Join чаще всего становится оптимальным выбором. #dotnet_challenge
2 022
16
👩‍💻 Приглашаем на открытый урок «Облегчённые (Slim) примитивы синхронизации» 🗓 16 апреля в 20:00 МСК 🆓 На открытом уроке
👩‍💻 Приглашаем на открытый урок «Облегчённые (Slim) примитивы синхронизации» 🗓 16 апреля в 20:00 МСК 🆓 На открытом уроке рассмотрим: ✔️ Проблему синхронизации доступа к общему ресурсу в многопоточном приложении в рамках внутрипроцессного взаимодействия; ✔️ Разберём классическую задачу читателей–писателей и её реализацию с использованием примитивов синхронизации из пространства имён System.Threading; ✔️ Отдельно обсудим, в каких случаях облегчённые версии примитивов (например, SemaphoreSlim и ReaderWriterLockSlim) оказываются эффективнее стандартных решений, таких как Monitor, Mutex и конструкция lock. 🌿 Вебинар является частью курса «C# разработчик. Экспертный уровень» 🔗 Ссылка на регистрацию: https://otus.pw/GyYC/?erid=2W5zFGGTxgH Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
696
17
🔥 Ты не проверишь весь код, если он большой, но нужные инструменты проверят Невозможно вручную ревьюить каждую строчку. Даже
🔥 Ты не проверишь весь код, если он большой, но нужные инструменты проверят Невозможно вручную ревьюить каждую строчку. Даже в маленьком проекте что-то ускользает. Здесь и подключается статический анализ. Он работает как второй слой контроля прямо во время разработки. Подсвечивает баги, плохие паттерны и потенциальные уязвимости ещё до запуска кода. В итоге ты ловишь проблемы на раннем этапе, а не после релиза. Для C# это особенно просто внедряется. Пара настроек и у тебя уже есть автоматический аудит кода без лишней боли. Если пишешь на C# и не используешь статический анализ, ты реально теряешь быстрые фиксы и чистоту кода. Начать можно отсюда
2 075
18
🚨 «Нет времени на тесты» уже не работает В 2026 писать тесты стало проще, чем придумывать оправдания ИИ генерит шаблоны, доп
🚨 «Нет времени на тесты» уже не работает В 2026 писать тесты стало проще, чем придумывать оправдания ИИ генерит шаблоны, дописывает кейсы и закрывает рутину Если у тебя есть нормальная структура, всё остальное ускоряется в разы Вот минимальный стек, который покрывает почти всё • Для юнитов • xUnit остаётся стандартом • TUnit можно смотреть как более современную альтернативу Для ассёртов • Shouldly даёт максимально читаемые проверки • FluentAssertions теперь платный, это стоит учитывать Для интеграционных тестов Aspire сильно упрощает жизнь WebApplicationFactory плюс TestContainers дают реальные зависимости в тестах Respawn чистит базу между прогонами Для фронта • Playwright сейчас лучший выбор • Selenium уже больше про легаси Для моков • NSubstitute самый чистый по API • Moq как дефолт, если привык Для данных Bogus и AutoFixture закрывают генерацию тестовых сценариев Для перфома нса • BenchmarkDtNet для микро-бенчей • k6 для нагрузки • NBomber если хочешь остаться в C# Что по факту важно Тебе не нужен весь этот стек сразу Достаточно двигаться по порядку • Сначала юнит-тесты • Потом интеграция • Потом нагрузка • Потом E2E Самый частый фейл не в инструментах А в том, что тесты откладывают «на потом» В 2026 это уже странное решение Гайд по интеграционным тестам в Aspire https://antondevtips.com/blog/dotnet-aspire-integration-testing-best-practices-for-distributed-applications?utm_source=twitter&utm_medium=social&utm_campaign=09-04-2026
1 940
19
👩‍💻 Открытый урок «Облегчённые (Slim) примитивы синхронизации» 🗓 16 апреля в 20:00 МСК 🆓 На открытом уроке рассмотрим: ✔
👩‍💻 Открытый урок «Облегчённые (Slim) примитивы синхронизации» 🗓 16 апреля в 20:00 МСК 🆓 На открытом уроке рассмотрим: ✔ Проблему синхронизации доступа к общему ресурсу в многопоточном приложении в рамках внутрипроцессного взаимодействия; ✔ Разберём классическую задачу читателей–писателей и её реализацию с использованием примитивов синхронизации из пространства имён System.Threading; ✔ Отдельно обсудим, в каких случаях облегчённые версии примитивов (например, SemaphoreSlim и ReaderWriterLockSlim) оказываются эффективнее стандартных решений, таких как Monitor, Mutex и конструкция lock. Для кого: Вебинар будет полезен разработчикам, которые уже знакомы с базовыми механизмами синхронизации в .NET и хотят углубить понимание инструментов, предоставляемых стандартной библиотекой для построения безопасных и производительных многопоточных приложений. 🔗 Ссылка на регистрацию: https://otus.pw/ncbR/
1
20
🚀 Почему этот EF Core код тормозит? Технически - всё ок. По производительности не очень. Вот типичная ошибка: ❌ Загружаешь в
🚀 Почему этот EF Core код тормозит? Технически - всё ок. По производительности не очень. Вот типичная ошибка: ❌ Загружаешь всю сущность (все колонки) ❌ Потом фильтруешь и мапишь уже в памяти Что происходит: - лишние данные тянутся из БД - растёт нагрузка на сеть - увеличивается потребление памяти - замедляется приложение ✅ Как правильно: Используй проекцию через `.Select()` прямо в запросе: - берёшь только нужные поля - меньше данных из БД - быстрее запрос - меньше нагрузка на систему 📌 Правило простое: Не тащи всё - бери только то, что используешь Именно такие мелочи чаще всего дают x2–x10 к скорости.
1 898