RU

Бенчмаркая Regex: конструктор показал 10 мкс, первый вызов — 1307

Проверить строку регулярным выражением в .NET можно по-разному, но совет всегда один: включите RegexOptions.Compiled или возьмите генератор. Замеры…

regexgeneratedregexregexoptionsbenchmarkdotnetjitкэшпроизводительностьрегулярные выражения.net 10string
Habr
RU

Бенчмаркая FrozenDictionary: заменил Dictionary — получил от ×0,76 до ×1,9

FrozenDictionary сделан под словари, которые заполняют один раз при старте, а дальше только читают. Замерил на четырёх машинах и трёх рантаймах — ра…

frozendictionarydictionaryimmutabledictionaryreadonlydictionarybenchmarkdotnetgethashcodeколлекциипроизводительность.net 10switch
Habr
RU

Бенчмаркая ключи Dictionary: забыл IEquatable — получил ×5 и 96 байт на каждый поиск

Структура в роли ключа Dictionary — частый случай. Забыл IEquatable — и каждый TryGetValue в 4,4–5,7 раза медленнее, плюс 96 байт в куче на каждый п…

dictionaryiequatableboxingбоксингrecord structbenchmarkdotnetgethashcodeпроизводительность.net 10structs
Habr
RU

Бенчмаркая поиск по строке: самописные циклы проигрывают от ×14 до ×154

Уважаемые читатели, в этой статье я хочу рассказать про поиск по строке и представить свои выводы. Началось с оптимизации: сравнил поиск символа цик…

simdavx2avx-512benchmarkdotnetindexofsearchvaluesryujitдизасмпроизводительностьбенчмарк
Habr
RU

Бенчмаркая проверки границ: фикс, который шёл 8  лет, и проверка, которая жива до сих пор

Уважаемые читатели, в этой статье я хочу рассказать о проверках границ массива и представить свои выводы. Каждое обращение arr[i] обязано проверить…

benchmarkdotnetJITbounds checkпроверка границRyuJIT.NET 11дизассемблированиепроизводительностьоптимизациямассивы
Habr
RU

Бенчмаркая foreach и энумераторы: аллокации, которые прятались 10 лет

Уважаемые читатели, в этой статье я хочу рассказать о скрытых аллокациях в обычном foreach и представить свои выводы. Тесты сделаны на .net 8, .net…

benchmarkdotnetforeachboxingаллокацииGCJITescape analysis.NET 10производительностьSortedList