StringBuilder类的append方法与"+"操作符连接字符串之间的区别

4

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

在什么情况下,使用Append方法比“+”操作符在连接两个字符串时更加高效或更快?


1
https://dev59.com/WGfWa4cB1Zd3GeqPezmp - Farhad Jabiyev
这可能是.NET世界中最常见的问题。 - Chris Farmer
3个回答

7
首先,StringStringBuilder是不同的类。 String类表示不可变类型,而StringBuilder类表示可变类型。
当您使用+连接字符串时,它使用String.Concat方法。每次都会返回一个新的字符串对象。

StringBuilder.Append 方法会追加指定字符串的副本。它不会返回新字符串,而是改变原有字符串。

为了达到高效的目的,建议阅读Jeff的文章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
我很遗憾不能为那个回答点赞,因为它链接到了Jeff Atwood的优秀文章... - user2819245

0

字符串是不可变的,所以当你添加时,实际上在后台创建了一个新对象。

当你使用 StringBuilder 时,它提供了一种高效的方法来连接字符串。

说实话,如果你只使用一两次,你不会真正注意到有很大的改进。但是当你在循环中使用 StringBuilder 时,效率就会提高。


0
当您连接两个字符串时,实际上会创建一个新的字符串作为结果。StringBuilder具有在添加内容时自动调整大小的能力,这可能会更快。
像所有事物一样,这取决于情况。如果您只是连接两个小字符串,例如:
string s = "a" + "b";

最好的情况是性能没有差别,但很可能比使用StringBuilder更快,而且更容易阅读。

StringBuilder更适用于连接编译时不知道数量的任意字符串的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接