Класс string неэффективный для осуществления повторяющихся изменений строки, т.к. после инициализации объекта string он больше не может измениться, а методы и операторы которые изменяют содержимое строки, в действительности создают новые строки, копируя в них содержимое старых строк в случае необходимости.
string Greeting = "Hello "; Greeting += "world!";
Создается объект типа string который инициализируется текстом. При этом среда .NET выделяет ровно столько памяти, сколько необходимо для хранения строки (39) символов, а переменная Greeting будет ссылаться на этот экземпляр строки.
Далее создается новый экземпляр строки, под который выделяется ровно столько памяти, сколько требуется для объединенного текста (в суме 12 символов). Первоначальная строка копируется в новую строку, с добавлением нового текста, после чего обновляется адрес, хранящийся в переменной Greeting (старый строковый объект выходит из области видимости и будет удален сборщиком).
Читать далее...