.net - String.Format против «string»+«string» или StringBuilder?



c# string interpolation vs string format (2)

Здесь нет соответствующих различий. Но при условии, что String.Format внутренне использует StringBuilder (вы можете видеть это с помощью инструмента Reflector), использование StringBuilder.Append напрямую должно быть быстрее.

РЕДАКТИРОВАТЬ: Конечно, использование оператора «+» является худшим вариантом, поскольку он создает новый экземпляр строки для каждой строки, которую вы объединяете.

https://src-bin.com

Возможные дубликаты:
Является ли String.Format столь же эффективным, как StringBuilder?
C # Строка вывода: формат или конкат?

Какой приоритет производительности и какие должны быть условия, чтобы отдавать предпочтение каждому из следующего:

String.Format("{0}, {1}", city, state);

или же

city + ", " + state;

или же

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();

Answer #1
  • Компилятор оптимизирует как можно больше конкатов строк, поэтому, например, строки, которые просто разбиты для разрыва строки, обычно можно оптимизировать в один строковый литерал.
  • Конкатенация с переменными будет скомпилирована в String.Concat
  • StringBuilder может быть намного быстрее, если вы выполняете несколько (более 10 или около того) «модификаций» строки, но она несет некоторые дополнительные издержки, потому что она выделяет больше места, чем нужно, в своем буфере и изменяет размер своего внутреннего буфера, когда это нужно.

Я лично использую String.Format почти все время по двум причинам:

  • Поддерживать строку формата намного проще, чем перегруппировать кучу переменных.
  • String.Format принимает IFormatProvider, который передается любым IFormattable типам, встроенным в строку (например, числам), так что вы получаете соответствующее числовое форматирование для указанной культуры и в целом просто больше контролируете, как форматируются значения.

Например, поскольку в некоторых культурах в качестве десятичной запятой используется запятая, вы можете с помощью StringBuilder или String.Format указать, что вы указали CultureInfo.InvariantCulture, если хотите, чтобы числа были отформатированы так, как вы хотите.

Еще две вещи, на которые стоит обратить внимание ...

  • StringBuilder также имеет функцию AppendFormat, которая дает вам гибкость String.Format, не требуя ненужного второго буфера.
  • При использовании StringBuilder убедитесь, что вы не победили цель путем объединения параметров, которые вы передаете в Append. Это легко пропустить.




string.format