.net 是字典<;TKey,TValue>;是否在备份存储器中添加空元素?
我正在查找.net 是字典<;TKey,TValue>;是否在备份存储器中添加空元素?,.net,dictionary,.net,Dictionary,我正在查找词典后面的代码。有趣的是在private Insert方法中,有一个bucket似乎在预先调整大小的数组中保留空插槽。在Insert方法中,代码检查bucket是否有剩余元素,并在必要时调整大小。添加的元素数是素数的一个因子。此外,字典条目属性存储在具有hashcode、key和value的结构中 我的问题是:目的是什么?这样做是为了防止在内存不足时尝试向dictionary对象添加项吗 注意:我不想在这里粘贴任何代码,因为它需要反汇编才能读取。每次需要调整集合的大小时,都会导致堆上出
词典
后面的代码。有趣的是在private Insert
方法中,有一个bucket
似乎在预先调整大小的数组中保留空插槽。在Insert
方法中,代码检查bucket是否有剩余元素,并在必要时调整大小。添加的元素数是素数的一个因子。此外,字典条目属性存储在具有hashcode、key和value的结构中
我的问题是:目的是什么?这样做是为了防止在内存不足时尝试向dictionary对象添加项吗
注意:我不想在这里粘贴任何代码,因为它需要反汇编才能读取。每次需要调整集合的大小时,都会导致堆上出现一些抖动,这需要一些时间。初始化这些“空插槽”以防止出现这种情况 大多数集合都有构造函数,可以指定初始大小、初始“潜在”大小和增长因子。指定确切的大小,如果您知道这是最好的方法。字典对象不会使用这种方法添加新的空值。它所做的是为以后需要添加的数据预分配一个备份存储。最终目标是,平均插入案例不需要分配即可完成。相反,它会在现有的bucket数组中找到一个插槽来放置自己 您提到的其他一些项目(如素数和哈希代码)的原因是大多数哈希表样式实现所共有的属性。我不想在这里逐一讨论,而是让你们看一下维基百科关于这个主题的文章