StringBuilder - Должны ли использоваться только Append и AppendLine без объединения строк в аргументах? - PullRequest
0 голосов
/ 28 декабря 2018

Я начал использовать StringBuilder, так как слышал, что он гораздо более оптимизирован, когда дело доходит до вывода строк.

Мой вопрос касается использования +, поскольку строки неизменяемы и когда вы добавляете ихвместе он выделяет новую строку.

Если я использую этот оператор в аргументах для функции StringBuilder.Append, я предполагаю, что он по существу будет иметь те же издержки.

Например:

string animal1 = "dog";
string animal2 = "cat";

stringBuilder.Append("Today I saw a " + animal1 + " and " + animal2);

MyПредполагается, что это может объединить эти тексты вместе, выделяя память в любом случае.

Я предполагаю, что более эффективный (хотя и многословный) способ сделать это будет:

stringBuilder.Append("Today I saw a");
stringBuilder.Append(animal1);
stringBuilder.Append(" and ");
stringBuilder.Append(animal2);

Это правильно?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

У вас есть ошибка во втором примере, поскольку вы пропускаете пробел между "Сегодня я видел" и animal1.Если вы не делаете это чрезмерным образом (в цикле с большим количеством итераций), вы, вероятно, не найдете ощутимых различий, поэтому лучше всего стремиться к удобочитаемости.

$"Today I saw a {animal1} and a {animal2}"

Да, я добавилa перед вторым животным тоже :) Я не рассматриваю случаи для "an".

У вас также есть возможность использовать AppendFormat, если вы хотите быть менее многословным со всеми этими добавлениями...

stringBuilder.AppendFormat("Today I saw a {0} and a {1}", animal1, animal2);
0 голосов
/ 28 декабря 2018

Конкатенация подобных строк выделяет память для новой строки, просто для того, чтобы добавить ее к вашему StringBuilder, что просто расточительно.Как вы заметили, вы должны просто явно Append их.

...