我正在研究 Dictionary<TKey, TValue>
背后的代码.有趣的是在 private Insert
方法,有一个bucket
似乎在预先确定大小的数组中包含空槽。 Insert
里面方法中,代码会检查桶中是否还有剩余元素,并在必要时调整大小。添加的元素数是素数的因数。此外,字典条目属性存储在具有哈希码、键和值的结构中。
我的问题:目的是什么?这样做是为了防止在可能没有足够的内存可用时尝试向字典对象添加项目吗?
注意:我不想在这里粘贴任何代码,因为它需要反汇编才能阅读。
最佳答案
Dictionary<TKey,TValue>
对象不会使用这种方法添加新的空值。它正在做的是为稍后将被要求添加的数据预先分配一个后备存储。最终目标是平均插入案例不需要分配即可完成。相反,它会在现有的桶阵列中找到一个位置来放置自己。
您提到的其他一些项目(如素数和哈希码)的原因是大多数哈希表样式实现的共同属性。我不会在这里一一介绍它们,而是将您指向有关该主题的维基百科文章
关于.net - Dictionary<TKey, TValue> 是否在后备存储中添加空元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4006638/