Start Debugging

Тег: csharp

199 статей · Страница2из20

Что такое Span<T> в C# и когда он действительно ускоряет ваш код?
Span<T> -- это ref struct, живущий только в стеке и указывающий на память, которой вы уже владеете, поэтому у него нет собственной аллокации. Он ускоряет код ровно в трёх ситуациях: замена буфера в куче на stackalloc, нарезка без копирования и плотные циклы, где JIT убирает проверки границ. В остальных случаях он ничего не меняет, а через await он не компилируется.
Что такое атрибут DynamicallyAccessedMembers?
DynamicallyAccessedMembers сообщает триммеру .NET и AOT-компилятору, к каким членам типа Type вы обращаетесь через рефлексию, чтобы они были сохранены, а не удалены при тримминге. Он превращает молчаливое исключение MissingMethodException во время выполнения в предупреждение IL2070 на этапе сборки. Вот что делает этот атрибут, как работает лежащий в его основе анализ потока данных и как правильно аннотировать параметры, поля и параметры обобщённых типов.
2026-06-20 csharpdotnetasync
Что такое ValueTask<T> и когда он того стоит?
ValueTask и ValueTask<T> -- это структуры, которые позволяют асинхронному методу вернуть результат без выделения Task в куче, когда он завершается синхронно. Выигрыш -- одно выделение памяти меньше на горячих путях, которые обычно завершаются без ожидания. Цена -- строгий контракт ожидания ровно один раз. Вот что этот тип представляет собой на самом деле, как он работает и тот узкий набор случаев, где он оправдывает себя.
Что такое генератор исходного кода и когда он мне нужен?
Понятное руководство по генераторам исходного кода в C#: что они на самом деле делают, как работает пайплайн IIncrementalGenerator, когда они выигрывают у рефлексии или T4 и в каких случаях к ним не стоит прибегать. С работающими примерами на .NET 11 и C# 14.
Что такое IAsyncEnumerable<T> и когда его следует использовать?
IAsyncEnumerable<T> — это интерфейс для асинхронных потоков: последовательность, элементы которой поступают со временем и каждый из которых может потребовать await. Вот что это на самом деле, как await foreach и yield приводят его в движение, и правило, когда выбирать его вместо Task<List<T>>.
Что такое Native AOT и чего он вам стоит?
Native AOT компилирует ваше .NET-приложение в единый автономный нативный бинарь без JIT, обеспечивая быстрый запуск и небольшое потребление памяти. Цена этого: цепочка инструментов C на этапе компиляции, более медленные публикации, сборки под каждый RID, отсутствие рефлексии и Reflection.Emit, обязательный тримминг и отсутствие Dynamic PGO. Вот полный баланс.
Blazor static SSR получает [SupplyParameterFromSession] в .NET 11 Preview 5
Чтение состояния сессии в статически серверно отрендеренном Blazor означало обращение к HttpContext.Session и сериализацию вручную. .NET 11 Preview 5 добавляет [SupplyParameterFromSession] для привязки свойства компонента напрямую к ключу сессии.
AsNoTracking vs AsNoTrackingWithIdentityResolution в EF Core 11: что выбрать?
Используйте AsNoTracking по умолчанию для запросов только на чтение. Прибегайте к AsNoTrackingWithIdentityResolution только тогда, когда граф результата содержит одну и ту же сущность несколько раз и ваш код полагается на получение единого общего экземпляра.
Назад Вперёд