Когда вы используете оператор + для построения строки:
string s = "01";
s += "02";
s += "03";
s += "04";
, то при первом объединении мы создаем новую строку длиной четыре и копируем в нее «01» и «02» -четыре символа скопированы.На втором объединении мы создаем новую строку длиной шесть и копируем в нее «0102» и «03» - копируются шесть символов.На третьем этапе мы создаем строку длиной восемь и копируем в нее «010203» и «04» - восемь символов копируются.До сих пор для этой строки из восьми символов было скопировано всего 4 + 6 + 8 = 18 символов.Продолжайте.
...
s += "99";
На 98-м конкате мы создаем строку длиной 198 и копируем в нее «010203 ... 98» и «99».Это дает нам всего 4 + 6 + 8 + ... + 198 = много, чтобы сделать эту строку из 198 символов.
Строитель строк не выполняет все это копирование.Скорее, он поддерживает изменяемый массив, который, как ожидается, будет больше, чем конечная строка, и при необходимости добавляет новые вещи в массив.
Что происходит, когда предположение неверно и массив заполняется?Есть две стратегии.В предыдущей версии фреймворка строитель строк перераспределял и копировал массив, когда он заполнялся, и удваивал его размер.В новой реализации построитель строк поддерживает связанный список относительно небольших массивов и добавляет новый массив в конец списка, когда старый заполняется.
Кроме того, как вы и предполагали, компоновщик строк может делать трюки с «небезопасным» кодом, чтобы повысить его производительность.Например, код, который записывает новые данные в массив, уже может проверить, что запись в массив будет в пределах границ.Отключая систему безопасности, можно избежать проверки на запись, которую в противном случае мог бы внести джиттер, чтобы убедиться, что каждая запись в массив безопасна.Конструктор строк выполняет ряд таких приемов, чтобы обеспечить повторное использование, а не перераспределение буферов, предотвращение ненужных проверок безопасности и т. Д.Я рекомендую против такого рода махинаций, если вы действительно не умеете правильно писать небезопасный код и действительно нуждаетесь в том, чтобы использовать все возможности.