使用StringBuilder类的append方法和串联“+”运算符之间的区别

时间:2013-11-17 16:23:35

标签: c#

使用StringBuilder类的Append方法和使用“+”运算符的Concatenation有什么区别?

在连接两个字符串时,Append方法以什么方式比“+”运算符更有效或更快?

3 个答案:

答案 0 :(得分:5)

首先,StringStringBuilder是不同的类。

String类代表immutable typesStringBuilder类代表可变类型。

当您使用+来连接字符串时,它会使用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更适合于连接任意数量的字符串的情况,这些字符串在编译时是您不知道的。