Уважаемые читатели, в этой статье я хочу рассказать о небольших тестах со строками и представить свои выводы. Тесты сделаны на .net 7. Все коды представлены для повторения но отмечу, что больше всего удивили циклы.    Про строки написано немало, поэтому слишком углубляться в их особенности не буду, лишь напомню, что строки в реальности могут быть изменяемыми с использованием различных ухищрений. Все тесты сделаны с использованием BenchmarkDotNet, так что каждый может проверить результаты и сделать свои выводы. Хочется начать с string.Replace, который проверяется разными вариантами, начиная с базового: Следующий и часто используемый при работе «на скорую руку» вариант тоже прост и однострочен: Под капотов string.Join и string.Split используют ReadOnlySpan и в целом вроде должны работать не очень медленно, так как работают со стеком. Кстати, если написать что-то вроде string.Split('  ', '.'), то перегрузка позволит убрать точки. Далее следует обычный Regex: Вариант с конструктором: Новая версия: Отмечу тот факт, что в GeneratedRegex по дефолту RegexOptions.Compiled игнорируется, а потому нет смысла его указывать.  Пришло время простого перебора, но в двух вариациях. Решение будет следующим: И второй вариант, в котором используется более оптимизированный for (раскладывается в while но с приятным дополнением): Добавим работу с обычным Span в версии new string(chars) и string.Concat: Кроме того в полном листинге вы найдете работу с unsafe Span, ReadOnlySpan, прямую модификацию строки и ранее мною не используемый но вполне рабочий вариант с string.Create().  Теперь самое интересное, а именно результаты: Пришло время проверить что там со Split? В целом идеи будут подобные для тестов, но с небольшими дополнениями или изменениями. В полном листинге можно глянуть что как тестировалось, только отмечу, что различные перегрузки стандартного string.Split() крайне удивили разнице в результатах теста, а работа с массивами была частично найдена на просторах Интернета, частично дописана своими силами.  Результаты тестов: Тут я удивился, что вроде однотипные перегрузки, а все же дают разные эффект по скорости. Понятное дело, что лучше всего обычный char передавать, так как не создаются массивы за счет использования params, но все же тесты есть тесты, надо пощупать, чтобы точно все понять. Остается разобраться с Substring. Метод вполне популярный, чтобы дополнить общеизвестные факты, но отмечу, что варианты тестов были собраны ради посмотреть «А как еще можно и что это даст?».  И сразу к результатам: Интересный факт в том, что, делая тест многократно можно заметить, что индексаторы чаще лидируют, а потому они вполне пригодны для замены стандартному Substring, что удивило. Все коды представлены для повторения но отмечу, что больше всего удивили циклы. Для старта обычный for: Далее не обычный for: Тут мы заранее говорим, сколько элементов и минус проверка. Да, увы, c# пока не так разумен, как хочется:( Не забываем про обычный foreach: И, бесспорно, while: И вторая версия с оптимизацией: Не будет лишним проверить Span: И ReadOnlySpan: Все на выходе дает одно и то же значение, что вы сможете легко проверить своими силами.  Итог говорит сам за себя: Всем удачи и до новых встреч! PS: статья немного поправлена по данным комментариев. Всем спасибо за участие!