Ответ 1
- Компилятор оптимизирует столько строк, сколько может, так что, например, строки, которые просто разбиваются на разрывы строк, обычно можно оптимизировать в один строковый литерал.
- Конкатенация с переменными будет скомпилирована в String.Concat
- StringBuilder может быть намного быстрее, если вы делаете несколько (более 10 или около того, я думаю) "модификаций" для строки, но она несет некоторые дополнительные накладные расходы, поскольку она выделяет больше места, чем вам нужно, в своем буфере и изменяет размер внутренний буфер, когда это необходимо.
Я лично использую String.Format почти все время по двум причинам:
- Намного проще поддерживать строку формата, чем перегруппировать кучу переменных.
- String.Format принимает IFormatProvider, который передается любым типам IFormattable, встроенным в строку (например, числовые), так что вы получаете соответствующее числовое форматирование для указанной культуры и в целом просто больший контроль над тем, как форматируются значения.
Например, поскольку в некоторых культурах используется запятая в виде десятичной точки, которую вы хотите обеспечить с помощью StringBuilder или String.Format, которые вы указываете CultureInfo.InvariantCulture, если вы хотите, чтобы номера были отформатированы так, как вы планируете.
Еще две вещи, чтобы отметить...
- StringBuilder также имеет функцию AppendFormat, которая дает вам гибкость String.Format, не требуя ненужного второго буфера.
- При использовании StringBuilder убедитесь, что вы не победите цель, объединив параметры, которые вы передаете в Append. Это легко пропустить.