Должен ли я использовать StringBuilder для объединения двух больших строк? - PullRequest
1 голос
/ 03 марта 2011

У меня есть композит с методом, который вызывает методы для объектов-членов.Каждый метод выплевывает строковую форму HTML.Строки формы могут быть довольно большими.Я знаю, что я всегда буду иметь дело только с 2 объектами-членами здесь.Это нормально с точки зрения производительности, просто конкатенировать каждое возвращаемое значение, или я должен использовать StringBuilder здесь?

    public override string RenderForm()
    {
        return _form1.RenderForm() + _form2.RenderForm();
    }

Ответы [ 3 ]

3 голосов
/ 03 марта 2011

В ситуациях, когда вы просто соединяете две строки, тогда оператор string + (или эквивалентно string.Concat (string, string)) вполне подойдет, независимо от длины строки.

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

public override void RenderForm(StringBuilder result)
{
    _form1.RenderForm(result);
    _form2.RenderForm(result);
}

....

public override void RenderForm(StringBuilder result)
{
    result.Append("<span class='FormName'>");
    result.Append(_formName);
    result.Append("</span>");        
}

Это потребует изменения всех компонентов иерархии, но, вероятно, улучшит распределение памяти.

1 голос
/ 03 марта 2011

Вы можете использовать string.Concat(_form1.RenderForm(), _form2.RenderForm())

Хотя, насколько я понимаю, компилятор C # преобразует ваш код в строку. В любом случае вызов Concat.

Эта страница имеет хороший анализ производительности различных методов.

0 голосов
/ 04 марта 2011

Возможно, это уже не эффективно, но об этом не упоминалось.

Вы также можете использовать String.Format ()

public override string RenderForm()
{
    return String.Format("{0}{1}", _form1.RenderForm(), _form2.RenderForm());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...