使用StringBuilder类的Append方法和使用“+”运算符的Concatenation有什么区别?
在连接两个字符串时,Append方法以什么方式比“+”运算符更有效或更快?
答案 0 :(得分:5)
首先,String
和StringBuilder
是不同的类。
String
类代表immutable types但StringBuilder
类代表可变类型。
当您使用+
来连接字符串时,它会使用String.Concat
方法。每次都会返回一个新的字符串对象。
StringBuilder.Append
方法附加指定字符串的副本。它不会返回新的字符串,而是更改原始字符串。
为了有效,请阅读杰夫的文章The Sad Tragedy of Micro-Optimization Theater
<强>它。只是。不。物质<!/强>
我们已经不知道这些操作了 将在一个循环中执行,所以我们可以排除残酷的穷人 天真串串联的性能特征。这就是全部 左边是微观优化,你开始担心的那一刻 微小的优化,你已经走错了路。
哦,你不相信我?可悲的是,我自己并不相信,这是 为什么我首先被吸引到这里。这是我的结果 - 在双核3.5 GHz Core 2 Duo上进行100,000次迭代。
1: Simple Concatenation 606 ms
2: String.Format 665 ms
3: string.Concat 587 ms
4: String.Replace 979 ms
5: StringBuilder 588 ms
答案 1 :(得分:0)
字符串是不可变的,因此当您追加时,实际上是在后台创建一个新对象。
当您使用StringBuilder
时,它提供了一种连接字符串的有效方法。
说实话,如果你使用一次或两次,你真的不会注意到一个很大的改进。但是当你在循环中使用StringBuilder
时,效率就会提高。
答案 2 :(得分:0)
当您连接两个字符串时,实际上会创建一个带有结果的新字符串。 StringBuilder可以在您添加时自行调整大小,这可以更快。
与所有事情一样,这取决于。如果您只是简单地连接两个小字符串:
string s = "a" + "b";
然后最好在性能上没有差别,但这可能比使用StringBuilder更快,也更容易阅读。
StringBuilder更适合于连接任意数量的字符串的情况,这些字符串在编译时是您不知道的。