Start Debugging

performance

82 статей · Страница2из9

EF.Parameter или EF.Constant в запросах EF Core 11

EF.Constant встраивает захваченное значение в SQL как литерал, EF.Parameter превращает литерал в SQL-параметр. Оставляйте поведение EF Core по умолчанию, используйте EF.Parameter, чтобы динамически построенные деревья выражений не перекомпилировались при каждом вызове, а EF.Constant применяйте только для значений с небольшим набором вариантов и настолько перекошенными данными, что каждому нужен свой план.

Volatile.Read и Volatile.ReadBarrier в .NET 10

Volatile.Read выполняет чтение одной ячейки с семантикой acquire. Volatile.ReadBarrier, новый в .NET 10, это барьер, который придаёт семантику acquire всем предшествующим чтениям. Используйте Volatile.Read для флагов и опубликованных ссылок, а ReadBarrier, когда нужно, чтобы пачка обычных или неатомарных чтений завершилась до следующего обращения к памяти, как в seqlock.
2026-09-27 dartfluttervs-code

Как ускорить медленный сервер анализа Dart в VS Code для большого монорепозитория Flutter

Монорепозиторий с десятками файлов pubspec.yaml заставляет сервер анализа Dart строить по контексту анализа на каждый пакет, и именно туда уходят память и минутный запуск. Переведите репозиторий на pub workspace, исключите сгенерированный код в analysis_options.yaml, откажитесь от устаревших плагинов анализатора и подтвердите результат на странице Insights. Измерено на Dart 3.12.2: в 2.3 раза меньше пиковой памяти и вдвое меньше времени холодного анализа.

CanvasKit или skwasm для Flutter web в 2026 году: какой рендерер выпускать?

Выпускайте skwasm через flutter build web --wasm, если ваши зависимости компилируются в Wasm: он загружает меньше и на тяжёлой сцене отрисовал на 36% больше кадров, чем CanvasKit. На Flutter 3.47.x оставайтесь в однопоточном режиме, пока исправление падения многопоточного режима на тексте не выйдет из beta.
2026-09-16 dotnetdotnet-11jit

JIT в .NET 11 девиртуализирует обобщённые виртуальные методы, и вместе с ними исчезает выделение памяти

В статье Стивена Тоуба Performance Improvements in .NET 11 вызовы обобщённых виртуальных методов падают с 6.7 нс и 24 байт до 1.8 нс и нуля выделений. Три пул-реквеста в RyuJIT открыли инлайнинг для самой непрозрачной диспетчеризации в .NET.

Lookup<TKey, TElement> или Dictionary<TKey, List<TValue>> для повторяющихся ключей в C#

Используйте ToLookup, когда группировка строится один раз и дальше только читается: она неизменяема, для отсутствующего ключа возвращает пустую последовательность, принимает ключ null и сохраняет порядок первого появления. Используйте Dictionary<TKey, List<TValue>>, когда группы меняются после создания или проходят через границу JSON.

Как найти обработчики async void, вызывающие ANR в Android-приложении на .NET MAUI

Play Console сообщает, что доля ANR превысила 0.47%, и выдаёт нативную трассировку, забитую кадрами libcoreclr.so. Разбираем, как перейти от этой бесполезной трассировки к конкретному обработчику события async void, заблокировавшему главный поток: printer для Looper, обёртка SynchronizationContext, называющая машину состояний, и dotnet-trace через dsrouter.
2026-09-04 dotnetnative-aotjit

Что такое флаг W^X в .NET и нужен ли он Native AOT?

W^X (write xor execute) - правило, по которому ни одна страница памяти не бывает одновременно записываемой и исполняемой. В .NET это переключатель DOTNET_EnableWriteXorExecute, включённый по умолчанию с .NET 7, и существует он исключительно ради JIT. Native AOT его никогда не читает. Разбираем, как среда выполнения его реализует, во что он обходится и когда его отключение - законное решение.

Возврат Task напрямую против проброса через async/await в методе репозитория на C#: что выбрать?

Отказ от async/await в пробрасывающем методе репозитория экономит около 6 нс и 72 байта, а стоит вам кадра стека, семантики try/catch и безопасного освобождения ресурсов. Оставляйте return await, если метод не является чистым пробросом на измеренном горячем пути.

AutoMapper против Mapperly и написанного вручную маппинга в 2026 году

Mapperly - выбор по умолчанию для нового кода .NET: он не уступает по скорости ручному маппингу, переживает Native AOT и находит незамапленные члены во время компиляции. AutoMapper по-прежнему выигрывает в ProjectTo. С бенчмарками и лицензионными порогами.
Назад Вперёд