Производительность и диагностика
Профилирование, аллокации и GC-паузы, утечки памяти, thread starvation, CPU- и I/O-bound задачи, кэширование, пулы соединений, HTTP/2 и HTTP/3.
Главное правило: сначала измерь, потом оптимизируй. В этом разделе — инструменты диагностики и типичные причины деградации .NET-сервисов в продакшене.
- 1 Как профилировать .NET приложение: dotnet-trace, PerfView, BenchmarkDotNet? Правило №1: сначала измерь. Интуиция о «медленном месте» ошибается чаще, чем кажется. dotnet-counters — метрики в реальном времени (CPU, GC, потоки пула, исключения, зап… Middle7 мин
- 2 Что такое GC паузы и как минимизировать аллокации? GC-пауза — время, когда сборщик приостанавливает управляемые потоки (фазы пометки и уплотнения). Эфемерные сборки (Gen 0/1) — доли–единицы мс; Gen 2 / LOH — десятки–сотн… Middle7 мин
- 3 Memory leaks в .NET — типичные причины, как находить? В .NET утечка — это объекты, которые больше не нужны, но остаются достижимыми от корней GC (статик, синглтон, живой поток, таймер), поэтому GC не может их собрать. Плюс … Middle6 мин
- 4 Thread starvation — как диагностировать в ASP.NET Core? Thread pool starvation — все потоки пула заняты ожиданием (заблокированы), а новые работы (обработка запросов, продолжения await) стоят в очереди. Пул добавляет потоки м… Senior6 мин
- 5 CPU-bound vs I/O-bound задачи — как правильно распараллеливать? I/O-bound — время уходит на ожидание внешних систем (БД, HTTP, диск, сеть). Решение — асинхронность: async/await, Task.WhenAll для параллельных независимых вызовов. Пото… Middle6 мин
- 6 Как работает кэширование: IMemoryCache, IDistributedCache, Redis? Кэш хранит результаты дорогих операций (запросы к БД, вызовы API, вычисления) ближе к месту использования. Эффект: меньше задержка, меньше нагрузка на источник. Цена — у… Middle6 мин
- 7 Cache invalidation стратегии: TTL, eviction, distributed cache consistency? «В информатике есть две сложные вещи: инвалидация кэша и именование» (Фил Карлтон). Инвалидация — решение, когда кэшированное значение перестаёт быть верным. TTL (истече… Senior7 мин
- 8 Что такое connection pooling для БД и HTTP? Установка соединения дорогая: TCP handshake + TLS + аутентификация (для БД ещё и создание серверного процесса/сессии) — единицы–десятки миллисекунд. Пул держит открытые … Middle6 мин
- 9 HTTP/2 и HTTP/3 — преимущества для .NET сервисов? HTTP/1.1: текстовый протокол, один запрос за раз на соединение (pipelining на практике не используется) → браузеры открывают 6 соединений на хост, заголовки повторяются … Middle6 мин
- 10 Как работает Minimal API быстрее обычных Controllers? Minimal API и контроллеры используют один и тот же Kestrel, конвейер middleware и endpoint routing. Разница — в том, что происходит после выбора эндпоинта. Контроллеры (… Senior5 мин