当前位置:  开发笔记 > 编程语言 > 正文

StringBuilder的默认容量

如何解决《StringBuilder的默认容量》经验,为你挑选了3个好方法。

什么是默认容量StringBuilder

什么时候应该(或不应该)使用默认值?



1> Alan..:

StringBuilder的默认容量是16个字符(我使用.NET Reflector来查找).



2> baretta..:

默认值为16,这似乎是.NET框架中任何类型的数组或列表的默认容量.您在StringBuilder上需要的重新分配次数越少,就越好.同时,也没有必要分配比需要更多的东西.

我通常使用某种类型的粗略估计来实例化StringBuilder,以确定StringBuilder的最终大小.例如,这可以基于稍后将用于构建字符串的一些迭代计数,乘以此迭代中每个项所需的大小.

// where 96 is a rough estimate of the size needed for each item
StringBuilder sb = new StringBuilder ( count * 96 );
for ( int i = 0; i < count; i++ )
{
...
}

当StringBuilder的大小太小而无法写入下一个字符串时,StringBuilder的内部char数组将重新分配为其当前大小的两倍.


这应该是公认的答案

3> Jon Hanna..:

这个问题今天作为另一个问题的副本出现,但我注意到有一部分没有得到回答.默认情况下(假设这意味着"当没有使用足够大的字符串创建时)"就像人们所说的那样是16,但是当你应该改变时我没有看到任何东西.

您可以在可以进行优化时进行更改.实际上,16的选择与优化相反.优化是挑选价值和方法,以便特别适合特定情况或可能情况的子集,(通常不是"使事情更快",尽管我们经常使用这个词).在这里,班级的设计者必须处理泛化 - 选择价值和方法,以便在广泛的案例中提供相当好的表现.

它们越小,内存的使用就越少.

它们越大,处理更大字符串的重新分配就越少.

在某些情况下,二元回合(两个整数)可能比其他数字提供更好的性能有几个原因,所以他们选择其中一个,但除了4或16或1024之间的选择是一个问题平衡不同的可能值.

有人使用 StringBuilder而不是设计,可能会更好地了解他们可能需要的尺寸.

如果他们要使用Append5个1位数字以及总长度为43个字符的字符串,则StringBuilder无论如何它的总长度将为48个字符,因此它们应该使用48的容量,因为48始终是最有效的大小为48长度的字符串.

如果他们做的事情可能有大约23到34个字符之间的任何长度,他们应该使用34.

如果他们正在做的事情可能永远不会超过60个字符,但偶尔可能会有,他们应该使用64(不要重新分配大多数部分,并获得上面提到的2的权力)你做的少数情况).

如果不可能得出结论,或者至少很难这样做而不是表演热点,那么你应该使用默认值.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有