Start Debugging

Тег: performance

59 статей · Страница2из6

Что такое многоуровневая компиляция и как о ней рассуждать?
Многоуровневая компиляция позволяет JIT в .NET компилировать каждый метод дважды: сначала быстро и без оптимизаций, чтобы приложение запустилось, а затем ещё раз с полными оптимизациями, когда среда выполнения узнаёт, что метод горячий. Здесь показано, как tier 0, tier 1, замена на стеке и Dynamic PGO складываются вместе, и как их наблюдать и настраивать.
SkiaSharp 4.0 выходит стабильной: рендеринг на GPU на 24% быстрее и очищенный API
SkiaSharp 4.148.0 - это первый стабильный релиз v4. Интерфейсы с нагрузкой на GPU рендерятся до 24% быстрее, шейдеры на CPU работают примерно в 6 раз быстрее, а устаревшая поверхность API наконец удалена. Вот во что реально обходится обновление.
Как реализовать keyset-пагинацию (cursor pagination) в EF Core 11
Замените Skip/Take на WHERE, который перескакивает за последнюю увиденную строку. Сортируйте по полностью уникальному ключу, переносите значения последней строки как курсор, и EF Core 11 превратит следующую страницу в поиск по индексу вместо сканирования с OFFSET.
Что такое Span<T> в C# и когда он действительно ускоряет ваш код?
Span<T> -- это ref struct, живущий только в стеке и указывающий на память, которой вы уже владеете, поэтому у него нет собственной аллокации. Он ускоряет код ровно в трёх ситуациях: замена буфера в куче на stackalloc, нарезка без копирования и плотные циклы, где JIT убирает проверки границ. В остальных случаях он ничего не меняет, а через await он не компилируется.
2026-06-20 csharpdotnetasync
Что такое ValueTask<T> и когда он того стоит?
ValueTask и ValueTask<T> -- это структуры, которые позволяют асинхронному методу вернуть результат без выделения Task в куче, когда он завершается синхронно. Выигрыш -- одно выделение памяти меньше на горячих путях, которые обычно завершаются без ожидания. Цена -- строгий контракт ожидания ровно один раз. Вот что этот тип представляет собой на самом деле, как он работает и тот узкий набор случаев, где он оправдывает себя.
Что такое Native AOT и чего он вам стоит?
Native AOT компилирует ваше .NET-приложение в единый автономный нативный бинарь без JIT, обеспечивая быстрый запуск и небольшое потребление памяти. Цена этого: цепочка инструментов C на этапе компиляции, более медленные публикации, сборки под каждый RID, отсутствие рефлексии и Reflection.Emit, обязательный тримминг и отсутствие Dynamic PGO. Вот полный баланс.
AsNoTracking vs AsNoTrackingWithIdentityResolution в EF Core 11: что выбрать?
Используйте AsNoTracking по умолчанию для запросов только на чтение. Прибегайте к AsNoTrackingWithIdentityResolution только тогда, когда граф результата содержит одну и ту же сущность несколько раз и ваш код полагается на получение единого общего экземпляра.
HybridCache против IMemoryCache против IDistributedCache в .NET 11: что выбрать?
Для нового кода кеширования в .NET 11 по умолчанию используйте HybridCache. Берите IMemoryCache, только если нужна скорость на одном сервере без сериализации, а IDistributedCache, только как хранилище-бэкенд. Вот матрица принятия решений.
Как использовать HybridCache в ASP.NET Core 11 с Redis в качестве кеша L2
Подключите HybridCache к Redis-кешу L2 в ASP.NET Core 11: зарегистрируйте сервис, добавьте распределённый кеш StackExchange Redis и позвольте GetOrCreateAsync дать вам двухуровневый кеш со встроенной защитой от лавины и инвалидацией по тегам.
Назад Вперёд