Quaternions vs. Euler Angles

Этот сравнительный тест показывает, что регулярная конкатенация быстрее при объединении 3 или меньшего количества строк.

http://www.chinhdo.com/20070224/stringbuilder-is-not-always-faster/

StringBuilder может сделать очень существенное улучшение в использовании памяти, особенно в Вашем случае добавления 500 строк вместе.

Рассматривают следующий пример:

string buffer = "The numbers are: ";
for( int i = 0; i < 5; i++)
{
    buffer += i.ToString();
}
return buffer;

, Что происходит в памяти? Следующие строки создаются:

1 - "The numbers are: "
2 - "0"
3 - "The numbers are: 0"
4 - "1"
5 - "The numbers are: 01"
6 - "2"
7 - "The numbers are: 012"
8 - "3"
9 - "The numbers are: 0123"
10 - "4"
11 - "The numbers are: 01234"
12 - "5"
13 - "The numbers are: 012345"

Путем добавления тех пяти чисел до конца строки мы создали 13 строковых объектов! И 12 из них были бесполезны! Ничего себе!

StringBuilder решает эту проблему. Это не "изменяемая строка", как мы часто слышим (, все строки в.NET неизменны ). Это работает путем хранения внутреннего буфера, массива символа. Вызов Добавляет (), или AppendLine () добавляет строку к вакууму в конце массива символов; если массив является слишком небольшим, он создает новый, больший массив и копирует буфер там. Таким образом в примере выше, StringBuilder, возможно, только понадобился бы единый массив для содержания всех 5 дополнений к строке - в зависимости от размера ее буфера. Можно сказать StringBuilder, насколько большой его буфер должен быть в конструкторе.

30
задан Colin Desmond 14 May 2011 в 15:10
поделиться