StringBuilder解决了什么问题?

时间:2011-03-31 11:09:34

标签: c# .net string stringbuilder string-building

为什么我会使用StringBuilder而不是简单追加字符串?例如,为什么实现像:

StringBuilder sb = new StringBuilder;
sb.Append("A string");
sb.Append("Another string");

String first = "A string";
first += "Another string";

4 个答案:

答案 0 :(得分:10)

StringBuilder的文档解释了其目的:

  

String对象是不可变的。一切   你使用其中一种方法的时间   System.String类,你创建一个新的   内存中的字符串对象,其中   需要新的空间分配   那个新对象。在哪些情况下   你需要重复表演   对字符串的修改,   与创建相关的开销   新的String对象可能很昂贵。该   System.Text.StringBuilder类可以   用于修改字符串时使用   没有创建新对象。对于   例如,使用StringBuilder类   可以提高性能   将许多字符串连接在一起   一个循环。

答案 1 :(得分:5)

在像你这样的简单案例中,这无关紧要。但通常,字符串是不可变的,这意味着对字符串变量的每次更改都会在内存中创建一个新缓冲区,复制新数据并放弃旧缓冲区。如果你正在进行大量的字符串操作,这会减慢你的程序并导致很多废弃的字符串缓冲区,需要由垃圾收集器收集。

答案 2 :(得分:0)

基本上是字符串不变性问题。它还提供了更简单的字符串操作方法。看看Using Stringbuilder Class

答案 3 :(得分:0)

StringBuilder是可变的。字符串不是。因此,对字符串的任何操作都会创建一个新对象。在第二个示例中,创建了两个对象(每行一个)。而在第一个中,只创建了一个对象。