🚀 Почему этот EF Core код тормозит?
Технически - всё ок.
По производительности не очень.
Вот типичная ошибка:
❌ Загружаешь всю сущность (все колонки)
❌ Потом фильтруешь и мапишь уже в памяти
Что происходит:
- лишние данные тянутся из БД
- растёт нагрузка на сеть
- увеличивается потребление памяти
- замедляется приложение
✅ Как правильно:
Используй проекцию через `.Select()` прямо в запросе:
- берёшь только нужные поля
- меньше данных из БД
- быстрее запрос
- меньше нагрузка на систему
📌 Правило простое:
Не тащи всё - бери только то, что используешь
Именно такие мелочи чаще всего дают x2–x10 к скорости.
Технически - всё ок.
По производительности не очень.
Вот типичная ошибка:
❌ Загружаешь всю сущность (все колонки)
❌ Потом фильтруешь и мапишь уже в памяти
Что происходит:
- лишние данные тянутся из БД
- растёт нагрузка на сеть
- увеличивается потребление памяти
- замедляется приложение
✅ Как правильно:
Используй проекцию через `.Select()` прямо в запросе:
- берёшь только нужные поля
- меньше данных из БД
- быстрее запрос
- меньше нагрузка на систему
📌 Правило простое:
Не тащи всё - бери только то, что используешь
Именно такие мелочи чаще всего дают x2–x10 к скорости.
Что выведет на экран этот код?
Anonymous Quiz
15%
False False
29%
False True
26%
True True
21%
True False
9%
⚙️ Как правильно работать с настройками в .NET?
В .NET есть 3 основных интерфейса для конфигурации.
И если выбрать не тот — приложение может просто игнорировать изменения в настройках.
Разбираем просто 👇
1️⃣ IOptions
- читается один раз при запуске
- кэшируется на всё время жизни приложения
- подходит для статических настроек
2️⃣ IOptionsSnapshot
- пересчитывается на каждый запрос
- подхватывает изменения в appsettings.json без перезапуска
- идеален для Web API (Scoped)
3️⃣ IOptionsMonitor
- обновляется в реальном времени
- триггерит событие при изменении настроек
- подходит для фоновых сервисов (Singleton)
Главное правило:
👉 статические настройки → IOptions
👉 веб-приложения → IOptionsSnapshot
👉 фоновые сервисы с реакцией на изменения → IOptionsMonitor
Если используешь не тот интерфейс — можешь долго не понимать, почему конфиг не обновляется.
А это одна из самых частых и незаметных ошибок в .NET.
Подробнее
В .NET есть 3 основных интерфейса для конфигурации.
И если выбрать не тот — приложение может просто игнорировать изменения в настройках.
Разбираем просто 👇
1️⃣ IOptions
- читается один раз при запуске
- кэшируется на всё время жизни приложения
- подходит для статических настроек
2️⃣ IOptionsSnapshot
- пересчитывается на каждый запрос
- подхватывает изменения в appsettings.json без перезапуска
- идеален для Web API (Scoped)
3️⃣ IOptionsMonitor
- обновляется в реальном времени
- триггерит событие при изменении настроек
- подходит для фоновых сервисов (Singleton)
Главное правило:
👉 статические настройки → IOptions
👉 веб-приложения → IOptionsSnapshot
👉 фоновые сервисы с реакцией на изменения → IOptionsMonitor
Если используешь не тот интерфейс — можешь долго не понимать, почему конфиг не обновляется.
А это одна из самых частых и незаметных ошибок в .NET.
Подробнее
MWS Cloud Platform приглашает на сеньорский митап
Что обсудим:
→ Почему vhost-user обходит virtio-net
→ Когда писать свой балансировщик вместо HAProxy
→ Почему нельзя выбрать один язык для платформы
Поспорим на дебатах Go vs Kotlin — все желающие могут присоединиться и задавать вопросы из зала.
📅 9 апреля, 18:00
📍 Место Санкт-Петербург, Конногвардейский бульвар, 4, Mishka Bar
Для кого: сеньоров-разработчиков, сетевых инженеров и архитекторов облачных платформ
Сложность докладов: 8/10
Места ограничены, регистрация обязательна. 👉
Что обсудим:
→ Почему vhost-user обходит virtio-net
→ Когда писать свой балансировщик вместо HAProxy
→ Почему нельзя выбрать один язык для платформы
Поспорим на дебатах Go vs Kotlin — все желающие могут присоединиться и задавать вопросы из зала.
📅 9 апреля, 18:00
📍 Место Санкт-Петербург, Конногвардейский бульвар, 4, Mishka Bar
Для кого: сеньоров-разработчиков, сетевых инженеров и архитекторов облачных платформ
Сложность докладов: 8/10
Места ограничены, регистрация обязательна. 👉
🔥 Парень без опыта навайбкодил клон Warcraft с помощью ИИ - индустрия, ты как там?
Обычный парень просто накидывал идеи в Claude и получил полноценную браузерную стратегию.
Что в итоге:
• 9 фракций, ~200 уникальных юнитов
• 50 заклинаний и 70 зданий
• 150 треков, тысячи спрайтов и реплик
• Прокачка с древами развития
• Магия, гарнизоны, торговля, туман войны
• Генерация карт на лету
И это ещё не всё:
• PvP с игроками
• PvE против ИИ (3 уровня сложности)
• Наблюдение за боями ИИ vs ИИ
• Голосовое управление армией
• Работает в браузере — ПК, телефон, планшет
Без регистрации. Просто заходишь в гостевой режим и играешь.
https://www.shardsofstone.com/
Обычный парень просто накидывал идеи в Claude и получил полноценную браузерную стратегию.
Что в итоге:
• 9 фракций, ~200 уникальных юнитов
• 50 заклинаний и 70 зданий
• 150 треков, тысячи спрайтов и реплик
• Прокачка с древами развития
• Магия, гарнизоны, торговля, туман войны
• Генерация карт на лету
И это ещё не всё:
• PvP с игроками
• PvE против ИИ (3 уровня сложности)
• Наблюдение за боями ИИ vs ИИ
• Голосовое управление армией
• Работает в браузере — ПК, телефон, планшет
Без регистрации. Просто заходишь в гостевой режим и играешь.
https://www.shardsofstone.com/
Что выведет на экран этот код?
Anonymous Quiz
7%
apple
7%
banana
10%
cucumber
41%
Нет фиксированного результата
35%
Ключевая идея — независимая эволюция.
Каждый сервис:
— владеет своей предметной областью
— хранит свои данные
— разворачивается независимо
Именно отсюда появляются реальные плюсы:
— команды двигаются быстрее
— релизы становятся безопаснее
— система становится устойчивее к сбоям
Но есть и обратная сторона:
— растёт сложность
— появляется больше координации между командами
— сложнее поддерживать консистентность данных
Микросервисы — это не «серебряная пуля».
Это обмен: гибкость и скорость ↔ сложность и операционные расходы.
Поэтому перед тем как идти в эту архитектуру — важно понять базу.
Разбор ключевых концепций и нюансов
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Skywork выкатили Matrix-Game 3.0 - и это уже почти живая игровая вселенная, генерируемая ИИ
720p в реальном времени при 40 FPS
5B модель с INT8-квантизацией - работает удивительно быстро
Главный фокус - стабильность во времени:
модель запоминает прошлые кадры и “достраивает” будущее без развалов сцены
Есть и более мощная версия - 28B MoE, которая лучше держит физику и динамику
Как обучали:
Unreal Engine + AAA-игры + реальные видео
Внутри не просто видео, а связка:
Video + Pose + Action + Prompt
за счёт этого можно генерировать длинные, осмысленные сцены
Это зачатки полноценного AI-геймдвижка
Ссылка на модель: https://modelscope.ai/models/Skywork/Matrix-Game-3.0
720p в реальном времени при 40 FPS
5B модель с INT8-квантизацией - работает удивительно быстро
Главный фокус - стабильность во времени:
модель запоминает прошлые кадры и “достраивает” будущее без развалов сцены
Есть и более мощная версия - 28B MoE, которая лучше держит физику и динамику
Как обучали:
Unreal Engine + AAA-игры + реальные видео
Внутри не просто видео, а связка:
Video + Pose + Action + Prompt
за счёт этого можно генерировать длинные, осмысленные сцены
Это зачатки полноценного AI-геймдвижка
Ссылка на модель: https://modelscope.ai/models/Skywork/Matrix-Game-3.0
Что выведет на экран этот код?
Anonymous Quiz
42%
True
38%
False
12%
Возникнет исключение
9%
Код не скомпилируется
🔥 Не понимаешь, что происходит внутри .NET приложения
Значит у тебя нет нормальной трассировки
Минимальный сетап, который стоит добавить почти в любой проект
OpenTelemetry с базовой инструментализацией
ASP.NET Core, HttpClient, EF Core, Redis и база через Npgsql или SqlClient
Этого хватает, чтобы видеть полный путь запроса
от входа в API до базы и внешних сервисов
Дальше всё становится прозрачным
• где тормозит
• где падает
• где утекает время
Для визуализации можно подключить любой стек
• Aspire Dashboard под быстрый старт
• Grafana если нужен прод уровень
• Jaeger для классического трейсинга
• Seq если хочешь объединить логи и трейсы
Seq особенно удобен, потому что нормально работает со структурированными логами
По факту это один из самых дешёвых апгрейдов инфраструктуры, а профит даёт сразу
Гайд
Значит у тебя нет нормальной трассировки
Минимальный сетап, который стоит добавить почти в любой проект
OpenTelemetry с базовой инструментализацией
ASP.NET Core, HttpClient, EF Core, Redis и база через Npgsql или SqlClient
Этого хватает, чтобы видеть полный путь запроса
от входа в API до базы и внешних сервисов
Дальше всё становится прозрачным
• где тормозит
• где падает
• где утекает время
Для визуализации можно подключить любой стек
• Aspire Dashboard под быстрый старт
• Grafana если нужен прод уровень
• Jaeger для классического трейсинга
• Seq если хочешь объединить логи и трейсы
Seq особенно удобен, потому что нормально работает со структурированными логами
По факту это один из самых дешёвых апгрейдов инфраструктуры, а профит даёт сразу
Гайд
🔥 Самая недооценённая фича HttpClient в .NET
DelegatingHandler - это middleware для исходящих HTTP-запросов, про который многие забывают.
По сути, ты собираешь pipeline для запросов так же, как в ASP.NET для входящих.
И вместо того чтобы пихать логику в каждый вызов, выносишь всё в одно место.
Авторизация, логирование, ретраи, кеш, аудит, всё навешивается как цепочка обработчиков.
Код становится чище, повторного кода меньше, а поведение запросов контролируется централизованно.
Один раз настроил и это работает для всех клиентов.
Если используешь HttpClient и до сих пор не трогаешь DelegatingHandler, ты реально упускаешь мощный инструмент
DelegatingHandler - это middleware для исходящих HTTP-запросов, про который многие забывают.
По сути, ты собираешь pipeline для запросов так же, как в ASP.NET для входящих.
И вместо того чтобы пихать логику в каждый вызов, выносишь всё в одно место.
Авторизация, логирование, ретраи, кеш, аудит, всё навешивается как цепочка обработчиков.
Код становится чище, повторного кода меньше, а поведение запросов контролируется централизованно.
Один раз настроил и это работает для всех клиентов.
Если используешь HttpClient и до сих пор не трогаешь DelegatingHandler, ты реально упускаешь мощный инструмент
🚨 Тихий убийца производительности в EF Core, о котором забывают почти все.
Запрос выглядит идеально - пока у тебя мало данных. Потом начинается ад.
Ты пишешь обычный Include, потом ещё один на ту же сущность… и не замечаешь, как EF Core превращает это в монструозный SQL с кучей JOIN’ов.
Что происходит под капотом:
EF делает несколько JOIN’ов → получается cross product → строки начинают дублироваться
Итог:
• данных в ответе становится в разы больше
• память улетает
• запросы резко тормозят
И всё это без единой ошибки в коде.
Решение есть и оно банально простое - Query Splitting.
Вместо одного жирного запроса EF разбивает его на несколько аккуратных. Без дублирования, без раздувания результата, без боли.
Одна настройка - и ты экономишь кучу ресурсов на проде.
P.S. Если работаешь с EF Core - такие нюансы решают, будет ли твой сервис летать или умирать под нагрузкой.
Запрос выглядит идеально - пока у тебя мало данных. Потом начинается ад.
Ты пишешь обычный Include, потом ещё один на ту же сущность… и не замечаешь, как EF Core превращает это в монструозный SQL с кучей JOIN’ов.
Что происходит под капотом:
EF делает несколько JOIN’ов → получается cross product → строки начинают дублироваться
Итог:
• данных в ответе становится в разы больше
• память улетает
• запросы резко тормозят
И всё это без единой ошибки в коде.
Решение есть и оно банально простое - Query Splitting.
Вместо одного жирного запроса EF разбивает его на несколько аккуратных. Без дублирования, без раздувания результата, без боли.
Одна настройка - и ты экономишь кучу ресурсов на проде.
P.S. Если работаешь с EF Core - такие нюансы решают, будет ли твой сервис летать или умирать под нагрузкой.