RU

Бенчмаркая сортировку строк: подстава с дефолтным компаратором — ×5

Сортировка строк без компаратора работает не так, как кажется, и заметно дольше. Замерил на четырёх машинах и четырёх рантаймах, посчитал обращения…

сортировка строкArray.SortStringComparerкомпараторBenchmarkDotNetпроизводительностьICUглобализация.NET 11
Habr
RU

Бенчмаркая LINQ: подстава с OrderBy — одно условие и полная сортировка

Одни вызовы после OrderBy проходят набор один раз, другие приводят к полной сортировке. По коду разницы не видно. Давайте проверим счётчиком обращен…

LINQOrderByFirstсортировкаBenchmarkDotNetпроизводительность.NET 11компаратороптимизация
Habr
RU

Бенчмаркая Span.Sort: выбрал компаратор-структуру — и получил 88 байт на вызов

Перегрузка Span.Sort с компаратором-структурой должна была работать быстрее обычной. Замер показал обратное: памяти она расходует больше всех, а вре…

Span.SortкомпараторIComparerBenchmarkDotNetаллокациибоксингпроизводительность.NET 11машинный код
Habr
RU

Бенчмаркая пагинацию: Where перед Skip — и метод в 1323 раза медленнее

Один Where в начале запроса — и метод медленнее в тысячу раз. Причём чем дальше страница, тем хуже: на первой разница полтора раза, на тысячной — по…

LINQпагинацияSkipTakeWhereBenchmarkDotNetNET 10производительностьбенчмаркUseSizeOptimizedLinq
Habr
RU

Бенчмаркая try/finally: один finally — и метод в 6,45 раза медленнее

Один try/finally внутри метода — и он работает в разы медленнее. Сам блок тут ни при чём, он не выполняет ни одной лишней инструкции. Причина в реше…

try-finallyвстраиваниеJITBenchmarkDotNetNET 10динамический профильforeachмашинный кодбенчмарк
Habr
RU

Бенчмаркая Enumerable.Chunk: почему батчей меньше, а проход до ×2,7 дольше

Chunk делит коллекцию на массивы — одна строка кода. Но есть размер чанка, после которого он замедляется в разы при тех же данных и той же памяти. А…

Enumerable.ChunkLINQкуча больших объектовLOHсборщик мусорачанкибатчингBenchmarkDotNet.NET 10аллокации
Habr
RU

Бенчмаркая StringBuilder: подстава на длинном тексте

StringBuilder делит текст на чанки по 8000 символов — вчетверо ниже порога кучи больших объектов. Запас такой, что попасть туда невозможно. Но чанк…

StringBuilderLOHкуча больших объектовчанкисборщик мусораоптимизация памятиаллокацииBenchmarkDotNet.NET 10Clear
Habr
RU

Бенчмаркая ArrayPool: подстава при копировании потоков — 131 072 байта в LOH

ArrayPool используют ради экономии на аллокациях. Но есть размеры, где он делает обратное: массив уходит в LOH, а через new остаётся в нулевом покол…

ArrayPoolLOHкуча больших объектовStream.CopyToFileStreamсборщик мусораоптимизация памятиBenchmarkDotNet.NET 10бенчмарк
Habr
RU

Бенчмаркая ZLinq: один IEnumerable в сигнатуре — и .NET 10 быстрее библиотеки в 3,9 раза

ZLinq — замена LINQ без аллокаций. На .NET 8 и .NET 9 время одинаковое. На .NET 10 иначе: массив тот же, но если параметр объявлен как IEnumerable,…

ZLinqLINQIEnumerableаллокациибенчмаркBenchmarkDotNetпроизводительность.NET 10JITдизассемблер
Habr
RU

Бенчмаркая System.Text.Json: те же данные, те же настройки, до ×4,3 разницы

В документации к PropertyNameCaseInsensitive есть предупреждение про накладные расходы, но не сказано, когда они появятся. Замерил на четырёх машина…

System.Text.JsonJsonSerializerOptionsPropertyNameCaseInsensitiveдесериализациякешпроизводительностьбенчмаркBenchmarkDotNet.NET 10оптимизация
Habr