Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是字典<;TKey,TValue>;是否在备份存储器中添加空元素?_.net_Dictionary - Fatal编程技术网

.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数组中找到一个插槽来放置自己

您提到的其他一些项目(如素数和哈希代码)的原因是大多数哈希表样式实现所共有的属性。我不想在这里逐一讨论,而是让你们看一下维基百科关于这个主题的文章


阅读有关哈希表实现的内容。@leppie,我非常乐意-有几个链接?:)啊…这很有道理-显然,调整大小是渐进的,是一个素数的因子(素数*2)-我想这是另一个有趣的方面,我想知道为什么它是一个素数用来调整大小…是的;我认为在统计学上,他们是如何使用素数来增加大小的,以及在“典型”使用中可能预计的大小增加,或者类似的情况。hehAccording to wiki:对于单独的链接,最坏的情况是将所有条目插入到同一个bucket中,在这种情况下,哈希表无效,搜索bucket数据结构的成本很高。如果后者是线性列表,则查找过程可能必须扫描其所有条目;因此,最坏情况下的成本与表中条目数n成正比。是我错了还是MS使用了这种方法?