LM
"Кроме того, строки в .NET неизменяемые, что также дает ряд преимуществ. Как я уже неоднократно рассказывал, неизменяемые структуры данных проще для понимания, потокобезопасны и более безопасны. (*)
Одним из преимуществ неизменяемых типов, как я говорил ранее, является не просто незменяемость, но еще и «персистентность». Под «персистентным» я понимаю тип, операции которого (как добавление элемента в очередь, удаление элемента из дерева) могут повторно использовать большую часть памяти, занимаемой существующей структурой данных. Поскольку тип неизменяемый, то вы можете повторно использовать его части, не беспокоясь за то, что кто-то их изменит.
Строки по своей природе являются неизменяемыми, но из-за своего расположения в памяти они не являются персистентными. Конкатенация двух строк не использует повторно память ни одной из строк; в процессе конкатенации создается новая строка, в которую копируется содержимое двух этих строк. Получение подстроки в строке не использует повторно содержимое исходной строки. Опять- таки, в этом случае просто создается новая строка нужного размера и все данные копируются в новую строку.
Это означает, что все операции над строками, такие как получение подстроки, выполняются за O(n) операций,"