使用具有容量的对象时,您可以使用哪些指南来确保在使用集合时最有效?似乎.NET框架已经将这些容量设置得很低。例如,我认为StringBuilder的初始容量为16.这是否意味着在将16个字符串插入StringBuilder后,StringBuilder对象将被重新分配并加倍大小?
答案 0 :(得分:4)
如果你知道一个集合或StringBuilder有多大,那么最好把它作为构造函数的容量传递给你。这样,只会进行一次分配。如果您不知道确切的数字,即使是近似值也会有所帮助。
答案 1 :(得分:2)
使用StringBuilder
,它不是字符串的数量,而是字符的数量。一般来说;如果您可以预测长度,请继续告诉它 - 但由于它使用加倍,如果您需要使用Add
等,则偶尔重新分配时不会有巨大的开销。 / p>
在大多数情况下,差异将是微不足道的和微观优化。没有告诉它的大小的最大问题是,除非集合有一个“修剪”方法,你可能几乎是你真正需要的尺寸的两倍(如果你非常不走运)。
答案 2 :(得分:2)
我只有两种情况可以明确设置集合的容量
有趣的是,对于#1,当我将从COM接口返回的数据复制到BCL集合类时,几乎总是这样做。所以我猜你可以说我只在互操作场景中这样做:)。
答案 3 :(得分:0)
说到StringBuilder
,我敢用最坏的情况。 StringBuilder
需要有条件的内存块,这很难在高度分散的堆上分配。
但我会考虑其他收藏品。