Использование нескольких построителей строк для одной строки

Итак, я в первую очередь разработчик C # и Java, но полагаю, что этот вопрос может относиться к любым языкам программирования, использующим StringBuilder или его производные.

Хорошо, так что это более или менее известно, что конкатенация даже небольшое количество строк может быть основной причиной смерти производительности (хотя и это спорно). Мой вопрос: знает ли кто-нибудь о влиянии на производительность использования построителя строк в построителе строк. Чтобы прояснить, что я имею в виду, позвольте мне включить некоторый фиктивный код, который должен помочь проиллюстрировать мою точку зрения.

Также я понимаю, что вызов нескольких экземпляров StringBuilder, естественно, снижает производительность, но я не верю, что вызову его достаточно, чтобы вызвать какие-либо реальные проблемы с производительностью. (Это предположение также может быть неверным, любое мнение по этому поводу также было бы полезным)

public string StringToGet()
{
     StringBuilder sb = new StringBuilder("Some Text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append(MethodThatCreatesAnotherString());
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append(MethodThatCreatesAnotherString());
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append(MethodThatCreatesAnotherString());
     //etc   

     return sb.toString();

}

private string MethodThatCreatesAnotherString()
{
     StringBuilder sb = new StringBuilder("Other text");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");
     sb.append("more text to add");

     return sb.ToString();
}

Логика подсказывает мне, что это не должно быть проблемой, но что-то в этом подходе мне просто не кажется правильным. Может ли кто-нибудь пролить свет на следующие вопросы?

  1. Создает ли это значительно большее снижение производительности, чем просто отказ от использования дополнительных методов и использование одного StringBuilder
  2. Является ли разумно приемлемой практикой.

Мы будем очень признательны за любые консультации по этому поводу.

5
задан pat8719 27 January 2014 в 23:20
поделиться