是否值得在Web应用程序中使用StringBuilder?

时间:2009-01-22 21:46:23

标签: c# stringbuilder

在网络应用程序中,我分割字符串并分配链接名称或字符串集合。将stringbuilder用于Web应用程序是否有显着的性能优势?

编辑:2个功能:将链接分成5-10个字符串。然后重新打包成另一个字符串。每次点击链接时,我也会一次向链接添加一个字符串。

6 个答案:

答案 0 :(得分:12)

你会连接多少个字符串?你知道会有多少,或者它取决于数据库中有多少记录等?

有关更多详细信息和指南,请参阅my article on this subject - 但基本上,在使用StringBuilder进行字符串连接时,使用Web应用程序并没有什么区别。

编辑:我担心你究竟在做什么仍然不完全清楚。如果你有一组固定的字符串要连接,并且你可以一次性完成所有这些,那么使用连接它可以更快并且可能更具可读性。例如:

string faster = first + " " + second + " " + third + "; " + fourth;

string slower = new StringBuilder().Append(first)
                                   .Append(" ")
                                   .Append(second)
                                   .Append(" ")
                                   .Append(third)
                                   .Append("; ")
                                   .Append(fourth)
                                   .ToString();

另一种选择是使用格式字符串。这可能是最慢的,但最具可读性:

 string readable = string.Format("{0} {1} {2}; {3}",
                                 first, second, third, fourth);

你的问题中提到“每次添加一个链接”的部分建议使用StringBuilder来实现这一点 - 任何自然导致循环的东西使用StringBuilder都会更有效(对于中等到大数)。

答案 1 :(得分:4)

是的,连接常规字符串是很昂贵的(实际上将字符串附加到另一个字符串的末尾)。每次更改字符串时,.net都会删除旧字符串并使用新值创建一个新字符串。这是一个不可改变的对象。

编辑:

Stringbuilder应谨慎使用,并像任何其他方法一样进行评估。有时将两个字符串连在一起会更有效,并且应根据具体情况进行评估。

Atwood has an interesting article related to this.

答案 2 :(得分:4)

你应该看一下关于连接字符串的this excellent article by Jon Skeet

答案 3 :(得分:2)

为什么Web应用程序或winforms应用程序的性能会有所不同?

使用stringbuilder是一个很好的做法,因为内存和对象分配,无论你为什么要构建代码,规则都适用。

答案 4 :(得分:2)

如果你在一个迭代次数很多的循环中创建字符串,那么使用stringbuilder是个好主意。否则,字符串连接是你最好的选择。

答案 5 :(得分:1)

首先,你还在写这个应用程序吗?如果是,则停止性能调整! 第二,优先考虑正确性超速。从长远来看,可读性更为重要,原因很明显。 第三,我们不知道你写的确切情况和代码。如果这种微观优化对代码的性能很重要,我们无法真正建议您。衡量差异。我强烈推荐红门的蚂蚁剖析器。