Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StringBuilder解决了什么问题?_C#_.net_String_Stringbuilder_String Building - Fatal编程技术网

C# StringBuilder解决了什么问题?

C# StringBuilder解决了什么问题?,c#,.net,string,stringbuilder,string-building,C#,.net,String,Stringbuilder,String Building,为什么我要使用一个简单的附加字符串?例如,为什么要像这样实施: StringBuilder sb = new StringBuilder; sb.Append("A string"); sb.Append("Another string"); 结束 在像你这样的简单案例中,这真的不重要。但一般来说,字符串是不可变的,这意味着对字符串变量的每次更改都会在内存中创建一个新的缓冲区,复制新数据并放弃旧的缓冲区。如果要进行大量字符串操作,这会降低程序的速度,并导致大量废弃的字符串缓冲区,这些缓冲区需要

为什么我要使用一个简单的附加字符串?例如,为什么要像这样实施:

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


在像你这样的简单案例中,这真的不重要。但一般来说,字符串是不可变的,这意味着对字符串变量的每次更改都会在内存中创建一个新的缓冲区,复制新数据并放弃旧的缓冲区。如果要进行大量字符串操作,这会降低程序的速度,并导致大量废弃的字符串缓冲区,这些缓冲区需要由垃圾收集器收集。

的文档说明了其用途:

字符串对象是不可变的。每一个 使用中的方法之一的时间 String类,则创建一个新的 内存中的字符串对象 需要新的空间分配给 那个新物体。在以下情况下: 你需要重复表演 对字符串的修改 与创建 新的字符串对象可能很昂贵。这个 System.Text.StringBuilder类可以是 要修改字符串时使用 不创建新对象。对于 例如,使用StringBuilder类 可以在以下情况下提高性能: 将多个字符串串联在一起 一个循环


基本上是字符串不变性问题。此外,它还提供了简化字符串操作的方法。看看

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

这是一种非常节省内存(具有性能优势)的方法,可以将大量字符串附加在一起,而不需要花费那么多对象。(更少的对象~垃圾收集器所需的时间更少)在循环之外这不是什么大问题,因为编译器可能会将其优化为
String first=“a stringAnother String”一个字符串。其他人似乎都提到了不在循环中使用它的原因。没错。但在现实中,如果您不需要执行大量的字符串操作,字符串和StringBuilder的性能几乎相同,并且对于短字符串和很少的附录,简单字符串的效果更好。
String first = "A string";
first += "Another string";