我应该使用StringBuilder来连接两个大字符串吗?

时间:2011-03-03 20:18:23

标签: c# string

我有一个带有调用成员对象方法的方法的复合。每种方法都会吐出一个字符串HTML表单。表单字符串可以变得非常大。我知道我在这里只会处理2个成员对象。简单地连接每个返回值或者我应该在这里使用StringBuilder是否很好?

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

3 个答案:

答案 0 :(得分:3)

在你只是将两个字符串放在一起的情况下,无论字符串有多长,字符串+运算符(或等效的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 :(得分:1)

您可以使用string.Concat(_form1.RenderForm(), _form2.RenderForm())

虽然我理解C#编译器会将你的代码转换为string.Concat调用。

这个page对不同的方法有很好的性能分析。

答案 2 :(得分:0)

这可能不再有效,但没有提及。

您也可以使用String.Format()

public override string RenderForm()
{
    return String.Format("{0}{1}", _form1.RenderForm(), _form2.RenderForm());
}