修改不可变的 https://en.wikipedia.org/wiki/Immutable_object结构如string https://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx必须通过复制结构来完成,这样会消耗更多内存并减慢应用程序的运行时间(也会增加GC
时间等...)。
StringBuilder
通过使用相同的可变对象进行操作来解决这个问题。
However:
当连接一个string
在编译时如下:
string myString = "123";
myString += "234";
myString += "345";
它实际上会编译成类似的东西:
string myString = string.Concat("123", "234", "345");
这个函数比使用更快StringBuilder
对于数量string
输入该函数的 s 是已知的。
所以对于编译时已知的string
你应该更喜欢的串联string.Concat()
.
至于未知数量的string
就像下面的例子:
string myString = "123";
if (Console.ReadLine() == "a")
{
myString += "234";
}
myString += "345";
现在编译器不能使用string.Concat()
然而,函数StringBuilder
仅当连接 6-7 或更多时,似乎在时间和内存消耗上更有效strings
.
不良做法的使用:
StringBuilder myString = new StringBuilder("123");
myString.Append("234");
myString.Append("345");
精细练习用法(注意if
用来):
StringBuilder myString = new StringBuilder("123");
if (Console.ReadLine() == "a")
{
myString.Append("234");
}
myString.Append("345");
最佳实践用法(请注意while
使用循环):
StringBuilder myString = new StringBuilder("123");
while (Console.ReadLine() == "a")
{
myString.Append("234"); //Average loop times 4~ or more
}
myString.Append("345");