Start Debugging

Тег: comparison

25 статей · Страница2из3

StringBuilder против интерполяции строк в .NET 11: что выбрать?
Используйте интерполяцию строк для одноразовой сборки фиксированного набора значений; используйте StringBuilder, когда вы добавляете в цикле или по неизвестному числу фрагментов. Разделительная линия - это цикл, а не количество значений.
lock vs Monitor vs SemaphoreSlim vs System.Threading.Lock в C#
Четыре способа защитить критическую секцию в C# и матрица решений для выбора одного из них. Используйте System.Threading.Lock для синхронной взаимной блокировки на .NET 9+, SemaphoreSlim когда секция охватывает await, и Monitor только когда нужны Wait/Pulse.
Polly против resilience handlers в .NET 11: что выбрать?
Используйте resilience handler из Microsoft.Extensions.Http.Resilience для вызовов через HttpClient, потому что это Polly с понимающими HTTP значениями по умолчанию и телеметрией в одну строку. Обращайтесь к ResiliencePipeline из Polly напрямую только тогда, когда защищаете нечто, не являющееся HttpClient.
Скомпилированные запросы EF Core vs сырой SQL vs Dapper: что побеждает на пути чтения?
Для путей с большим количеством чтений в .NET 11 чистый EF Core с AsNoTracking держится в пределах ~5% от Dapper. Используйте скомпилированные запросы на профилированном горячем пути одной строки, а Dapper только для наименьшей задержки или для SQL, который LINQ не может выразить.
HttpClient vs HttpClientFactory vs Refit: что использовать в .NET 11?
Никогда не создавайте HttpClient на каждый запрос. Используйте IHttpClientFactory для управления временем жизни и добавляйте Refit сверху, когда нужен типизированный интерфейс вместо написанного вручную кода запроса. Чистый singleton HttpClient годится лишь для самых простых случаев.
MediatR против простых сервисных классов в 2026: должна ли смена лицензии вас сдвинуть?
Для нового кода простые сервисные классы - лучший выбор по умолчанию. Смена лицензии MediatR в июле 2025 важна, только если вы выше порога Community в 5 млн долларов или отвергаете copyleft RPL-1.5. Сохраняйте MediatR, когда pipeline behaviors несут реальную нагрузку.
Native AOT против ReadyToRun против JIT в .NET 11: что выбрать для поставки?
Классический JIT с Dynamic PGO выигрывает по пропускной способности в установившемся режиме, ReadyToRun ускоряет запуск без изменений кода, а Native AOT даёт самый маленький и быстро стартующий бинарник ценой рефлексии и динамического кода. Выбирайте по форме развёртывания, а не по изолированным бенчмаркам.
ConfigureAwait(false) vs значение по умолчанию в .NET 11: имеет ли это ещё значение?
ConfigureAwait(false) по-прежнему обязателен в библиотечном коде, который может выполняться под SynchronizationContext (WinForms, WPF, MAUI). В коде приложения на ASP.NET Core, консольном приложении или worker-сервисе, работающих на .NET 11, это no-op.
Назад Вперёд