Когда делают Вы используете StringBuilder. AppendLine/string. Формат по сравнению с StringBuilder. AppendFormat?

57
задан Community 23 May 2017 в 02:26
поделиться

6 ответов

Я просматриваю AppendFormat сопровождаемый AppendLine как не только более читаемый, но также и более производительный, чем вызов AppendLine(string.Format(...)).

последний создает совершенно новую строку и затем добавляет ее оптовая торговля в существующего разработчика. Я не собираюсь идти до высказывания "Почему использование беспокойства StringBuilder тогда?" но это действительно кажется немного против духа StringBuilder.

61
ответ дан Jon Skeet 7 November 2019 в 06:08
поделиться

String.format создает объект StringBuilder внутренне. Путем выполнения

sbuilder.AppendLine( String.Format( "{0} line", "First"));

создается дополнительный экземпляр строкового разработчика, со всеми ее издержками.

<час>

Отражатель на mscorlib, Commonlauageruntimelibary, Системе. Строка. Формат

public static string Format(IFormatProvider provider, string format, params object[] args)
{
    if ((format == null) || (args == null))
    {
        throw new ArgumentNullException((format == null) ? "format" : "args");
    }
    StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
    builder.AppendFormat(provider, format, args);
    return builder.ToString();
}
11
ответ дан AdamSane 7 November 2019 в 06:08
поделиться

Если производительность важна, старайтесь избегать AppendFormat () полностью. Используйте несколько Добавляют () или AppendLine () вызовы вместо этого. Это действительно делает Ваш код больше и менее читаемым, но это быстрее, потому что никакой строковый парсинг не должен быть сделан. Строковый парсинг медленнее, чем Вы могли бы вообразить.

я обычно использую:

sbuilder.AppendFormat("{0} line", "First");
sbuilder.AppendLine();
sbuilder.AppendFormat("{0} line", "Second");
sbuilder.AppendLine();

, Если производительность не очень важна, в этом случае я использовал бы:

sbuilder.Append("First");
sbuilder.AppendLine(" line");
sbuilder.Append("Second");
sbuilder.AppendLine(" line");

(Конечно, это имело бы больше смысла если "Первый" и "Второй" где не строковые литералы)

2
ответ дан Chris 7 November 2019 в 06:08
поделиться

AppendFormat () намного более читаем, чем AppendLine (Строка. Формат ())

0
ответ дан Brian Genisio 7 November 2019 в 06:08
поделиться

Я предпочитаю эту структуру:

sbuilder.AppendFormat("{0} line\n", "First");

, Хотя по общему признанию существует что-то, чтобы быть сказанным для того, чтобы выделить разрывы строки.

0
ответ дан Joel Coehoorn 7 November 2019 в 06:08
поделиться

Это просто положительно ужасно для простого использования

sbuilder.AppendFormat("{0} line\n", first);

? Я имею в виду, я знаю, что это не платформенно независимо или что бы то ни было, но в 9 из 10 случаев, это сделало задание.

0
ответ дан Coderer 7 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: