Vla*_*tch 5 .net c# stringbuilder capacity
当我有StringBuilder一个容量为5 的空,我写"你好,世界!" 对它来说,C#标准是否指定了新的容量StringBuilder?我有一个模糊的记忆,它是新字符串长度的两倍(以避免每个新附加的字符串改变容量).
StringBuilder
Han*_*ant 15
取决于您正在谈论的.NET版本.在.NET 4之前,StringBuilder使用标准的.NET策略,每次需要扩大时,内部缓冲区的容量就会翻倍.
StringBuilder完全被重写为.NET 4,现在使用绳索.现在通过添加另一条最多8000个字符的绳索来扩展分配.不像早期策略那样有效,但避免了大缓冲区堵塞大对象堆的麻烦.如果您想仔细查看,可以从参考源获得源代码.
Ode*_*ded 5
C#标准不会指定BCL库类的行为,因为它与语言规范无关.
据我所知,实际行为未在任何规范中定义,并且是特定于实现的.
AFAIK,一旦达到当前容量,MS实施将使容量翻倍.
见这个和这个以前做题.
更新:
这已在.NET 4.0中更改.正如汉斯在答案中所描述的那样.现在使用绳索,一次添加额外的8000个字符.
但是,MSDN非常谨慎地指出实际行为是特定于实现的:
StringBuilder在需要时动态分配更多空间,并相应地增加容量.出于性能原因,StringBuilder可能会分配比所需更多的内存.分配的内存量是特定于实现的.
归档时间:
13 年,11 月 前
查看次数:
1968 次
最近记录:
8 年,3 月 前