Сравнение string и Span: поиск символов и подстрок
Публикую первую часть результатов сравнения методов string и Span. Начнём с методов для поиска символов и подстрок. Замеры проводились на массиве из 100 000 строк. Я постарался скомпоновать данные в виде диаграмм, но поскольку я сравнивал перегрузки с различными значениями StringComparison, то данных получилось очень много. Сырые результаты и бенчмарки можно найти здесь. Основные выводы, которые можно сделать на основе полученных данных ниже.
Contains
🟢Методы string.Contains(char value), string.Contains(string value), ReadOnlySpan<char>(char value) работают одинаково быстро.
🟢Методы Contains(char value, StringComparison comparisonType) и Contains(string value, StringComparison comparisonType) работают быстро при использовании Ordinal, OrdinalIgnoreCase, InvariantCulture и InvariantCultureIgnoreCase.
🟠Использование CurrentCulture и CurrentCultureIgnoreCase медленее в 250 – 330 раз.
StartsWith
🟢Методы StartsWith(string value, StringComparison comparisonType) работают быстро при использовании Ordinal, OrdinalIgnoreCase, InvariantCulture и InvariantCultureIgnoreCase.
🟠Использование CurrentCulture и CurrentCultureIgnoreCase медленее примерно в 100 раз.
🟠Метод string.StartsWith(string value) под капотом использует перегрузку с параметром CurrentCulture.
EndsWith
🟢Методы EndsWith(string value, StringComparison comparisonType) работают быстро при использовании Ordinal, OrdinalIgnoreCase, InvariantCulture и InvariantCultureIgnoreCase.
🟠Использование CurrentCulture и CurrentCultureIgnoreCase медленее примерно в 100 раз.
🟠Метод string.EndsWith(string value) под капотом использует перегрузку с параметром CurrentCulture.
IndexOf
🟢Метод IndexOf(char value) работает одинаково быстро как в string, так и в Span.
🟢Метод IndexOf(string value) работает быстро только в ReadOnlySpan.
🟢Методы IndexOf(char value, StringComparison comparisonType) и IndexOf(string value, StringComparison comparisonType) работают быстро при использовании Ordinal, OrdinalIgnoreCase, InvariantCulture и InvariantCultureIgnoreCase.
🟠Использование CurrentCulture и CurrentCultureIgnoreCase медленее примерно в 260 раз.
🟠Метод string.IndexOf(string value) под капотом использует перегрузку с параметром CurrentCulture.
LastIndexOf
🟢Метод LastIndexOf(char value) работает одинаково быстро как в string, так и в Span.
🟢Методы LastIndexOf(char value, StringComparison comparisonType) и LastIndexOf(string value, StringComparison comparisonType) работают быстро при использовании Ordinal, OrdinalIgnoreCase, InvariantCulture и InvariantCultureIgnoreCase.
🟠Использование CurrentCulture и CurrentCultureIgnoreCase медленее примерно в 260-370 раз.
🟠string.LastIndexOf(string value) под капотом этот метод использует перегрузку с параметром CurrentCulture.
IndexOfAny и LastIndexOfAny
🟢Все методы работают одинаково быстро.
Post #137
373




- 👍 12