- Компилятор оптимизирует как можно больше строк, так что, например, строки, которые просто разбиты на разрывы строк, обычно можно оптимизировать в один строковый литерал.
- конкатенации с переменными будет компилируется в String.Concat
- StringBuilder может быть намного быстрее, если вы делаете несколько (более чем 10 или так я думаю) «модификации» в строку, но он несет дополнительные накладные расходы, потому что он выделяет больше места, чем вам нужно в своем буфере, и изменяет его внутренний буфер, когда это необходимо.
Я лично использую String.Format почти все время по двум причинам:
- Это намного проще поддерживать формат строки, чем переставляя кучу переменных.
- String.Format принимает IFormatProvider, который передается любым типам IFormattable, встроенным в строку (например, числовые), так что вы получаете соответствующее числовое форматирование для указанной культуры и общее простое управление тем, как форматируются значения.
Например, поскольку в некоторых культурах использовать запятую в качестве десятичного вы хотели бы обеспечить либо StringBuilder или String.Format, что вы указываете CultureInfo.InvariantCulture, если вы хотите, чтобы убедиться, что номера были отформатированы так, как вы собираетесь ,
Еще две вещей, чтобы отметить ...
- StringBuilder также имеет функцию AppendFormat, которая дает вам гибкость String.Format, не требуя ненужный второй буфер.
- При использовании StringBuilder убедитесь, что вы не победите цель, объединив параметры, которые вы передаете в Append. Легко пропустить.
@Shimmy: Посмотрите на это http://stackoverflow.com/questions/6785/is-string-format-as-efficient-as-stringbuilder – shahkalpesh
HTTP: //blogs.msdn.com/b/ricom/archive/2004/03/12/performance-quiz-1-of-a-series.aspx – Freelancer
http://www.codinghorror.com/blog/archives/001218.html – Freelancer