Dictionary <tkey,tvalue =“”>在后备存储中添加空元素吗?</tkey,>

时间:2010-10-23 23:59:09

标签: .net dictionary

我正在研究Dictionary<TKey, TValue>背后的代码。有趣的是在private Insert方法中,有一个bucket似乎在预先调整大小的数组中保留空插槽。在Insert方法中,代码会检查存储桶是否还有剩余元素,并在必要时调整大小。添加的元素数量是素数的一个因子。此外,字典条目属性存储在具有哈希码,键和值的结构中。

我的问题:目的是什么?这样做是为了防止在没有足够的内存可用时将项目添加到字典对象中吗?

注意:我不想粘贴任何代码,因为它需要反汇编才能阅读。

2 个答案:

答案 0 :(得分:1)

每次需要调整集合大小时,都会导致堆上的一些颠簸需要一些时间。这些“空槽”被初始化以防止这种情况。

大多数集合都有构造函数,可用于指定初始大小,初始“潜在”大小和增长因子。如果您知道这是最好的事情,请指定确切的大小。

答案 1 :(得分:1)

使用此方法,Dictionary<TKey,TValue>对象不会添加新的空值。它正在做的是为稍后要求添加的数据预先分配后备存储。最终目标是平均插入案例不需要完成分配。相反,它会在现有存储桶阵列中找到一个插槽来放置自己。

您提到的其他一些项目(如素数和哈希码)的原因是大多数哈希表样式实现所共有的属性。而不是每个人都在这里,我将指向你关于这个主题的维基百科文章