【发布时间】:2014-03-05 20:42:44
【问题描述】:
我对使用StringBuilder 类有点困惑,首先:
string对象连接操作总是从现有的string和新数据创建一个新对象。StringBuilder对象维护一个缓冲区以容纳新数据的连接。如果空间可用,则将新数据附加到缓冲区的末尾;否则,分配一个新的更大的缓冲区,将原始缓冲区中的数据复制到新缓冲区,然后将新数据附加到新缓冲区。
但是创建StringBuilder 实例以避免创建String 的新实例的意义何在?这听起来像是“一对一”交易。
static void Main(string[] args)
{
String foo = "123";
using (StringBuilder sb = new StringBuilder(foo)) // also sb isn't disposable, so there will be error
{
sb.Append("456");
foo = sb.ToString();
}
Console.WriteLine(foo);
Console.ReadKey();
}
为什么我不应该只使用
+=
编辑: 好的,我现在知道如何重用 StringBuilder 的一个实例(仍然不知道这是否符合代码标准),但这不值得只用一个string,不是吗?
【问题讨论】:
-
@royB “字符串争用本机使用 stringbuilder (str1 + str2)”是什么意思? String concatenation 实际上 not 在内部使用 StringBuilder。
标签: c# .net string memory stringbuilder