我打算就这个其他 SO 问题发表一个答案,但有人在我前面使用 StringBuilder 类,无论如何,离题了......
我知道 .NET 中的字符串是不可变的,因此创建字符串并对其进行修改实际上会在内存中创建两个不同的字符串,这与StringBuilder Class
维护内部缓冲区并仅在ToString()
调用时创建最终字符串相反。我也知道 .NET 实习生每个字符串,所以只会为应用程序中使用过的每个字符串创建一个副本。
当您将一个字符串附加到另一个字符串时,它们都在应用程序中使用,因此它们都被实习了(不是吗?),不使用连接运算符附加字符串的主要原因是因为您最终会得到一个完成后内存中的一整串字符串,每个都比前一个大。
我知道连接01234
with56789
会导致内存中出现以下两个字符串:
01234
0123456789
在使用StringBuilder
will only 时,由于实习:
01234
56789
显然第二种方法对性能更好,但实际上有多好?我的意思是,如果您要从一小部分值列表中创建一个更大的字符串,我为什么要考虑StringBuilder
(本身占用内存空间)?总是好用吗?或者对于何时[不]使用它有什么好的经验法则?