c# – .NET ConcurrentDictionary初始容量设置为MSDN示例文档中
发布时间:2020-12-15 03:45:35 所属栏目:百科 来源:网络整理
导读:我只是看着 MSDN documentation for ConcurrentDictionary,我在“示例”代码中看到了这一点: // We know how many items we want to insert into the ConcurrentDictionary.// So set the initial capacity to some prime number above that,to ensure that
我只是看着
MSDN documentation for ConcurrentDictionary,我在“示例”代码中看到了这一点:
// We know how many items we want to insert into the ConcurrentDictionary. // So set the initial capacity to some prime number above that,to ensure that // the ConcurrentDictionary does not need to be resized while initializing it. int NUMITEMS = 64; int initialCapacity = 101; 作为参考,MSDN示例中的字典如下初始化: ConcurrentDictionary<int,int> cd = new ConcurrentDictionary<int,int>(Environment.ProcessorCount * 2,initialCapacity); for (int i = 0; i < NUMITEMS; i++) cd[i] = i * i; 在该示例中,字典永远不会包含超过64个项目.为什么不将初始容量设置为64,而不是大于64的看似任意的素数?评论说,这是为了确保字典在初始化时不需要调整大小,但为什么要使用initialCapacity = 64的类似字典需要调整大小?为什么选择这个素数? 解决方法
字典或散列表依赖于哈希键来获取较小的索引以查找相应的存储(数组).所以哈希函数的选择是非常重要的.典型的选择是获取密钥的哈希码(以便我们获得良好的随机分布),然后将码分割为素数,并使用提醒将其索引到固定数量的桶中.这允许将任意大的哈希码转换为有限的小数组,我们可以定义一个数组来查找.因此,重要的是将数组大小放在素数上,然后将尺寸的最佳选择变为大于所需容量的素数.这就是字典实现.
因此,基本上任何Modulo N(n为素数)字典实现都将需要其素数为素数.所以如果你说,所需的容量是X,那么这些实现通常会选择比所需容量大的下一个较大的引物数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |