c# - 何时使用 HybridDictionary 而不是其他 Dictionary 类型?

标签 c# performance dictionary collections

我正在查看 .Net 框架的 MSDN 中的 Collection 类。 我遇到了 HybridDictionary,它指出 ( http://msdn.microsoft.com/en-us/library/system.collections.specialized.hybriddictionary.aspx ):

Implements IDictionary by using a ListDictionary while the collection is small, and then switching to a Hashtable when the collection gets large.

所以我想知道 ListDictionary 里面写着 ( http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx )

Recommended for collections that typically include fewer than 10 items.

现在这对我来说似乎是一个任意(项目)数量。我无法在文档中找到这背后的机制,我怀疑性能边界可能与许多项目有关,例如 2^N(2 的 N 次方)。

现在我经常使用 Dictionary 的集合类型,集合可能包含 10 到 30 个项目,50 个顶部,具体取决于“页面大小”。

但是 HybridDictionaryListDictionary 需要拆箱并且没有通用类型构造函数。

我无法在任何地方找到关于 HybridDictionaryDictionary 性能的比较。

那么什么时候真正使用这个 HybridDictionary 而不是其他 Dictonary 类型?

附言如果 HybridDictionary 在项目数量增加时切换到 ListDictionaryHashTable 以优化其功能。为什么要使用 ListDictionary?如果软件中的某些要求发生变化,突然最多 20 个项目必须放入 ListDictionary,而不是最大数量的 10 个项目,则代码必须重构为 HybridDictionary 保持性能?

最佳答案

When to use a HybridDictionary over other Dictionary types?

当您确定集合大小将少于 10 个项目时,您将使用 ListDictionary

HybridDictionaryDictionary 几乎相同,但当集合大小小于 10 时将利用 ListDictionary 的性能项目。一旦集合增长到 10 以上,HybridDictionary 将从内部使用 ListDictionary 切换到像普通 Dictionary 一样使用 HashTable .

因此,何时使用一个,如果您的收藏通常少于 10 个项目,但有时会变得更大,那么 HybridDictionary 将是您要使用的那个。

例如,我们在移动设备应用程序通信层中使用 HybridDictionary,通信消息队列几乎总是低于 10 个项目,但如果后端服务器中断,通信消息将构建根据服务器停机时间的长短,达到 100 或 1000,在这种情况下 ListDictionary 会很糟糕,在那种情况下 HybridDictionary 将切换到 HashTable 以保持性能,并在低于 10 时仍能为我们提供最佳性能。

所以它用在专门的地方,因此它属于 System.Collections.Specialized 的命名空间 :)

关于c# - 何时使用 HybridDictionary 而不是其他 Dictionary 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18779433/

相关文章:

java - 将 PrintQueue 对象从一台计算机发送到另一台计算机?

PHP,从目录中搜索和删除文件 - 性能

javascript - 何时确定一次值并将其存储在变量中,而不是重复确定它,(javascript)?

python - 在嵌套的 json/dict 中搜索与指定键匹配的多个键值

c# - 为什么修改本地数据时yield return不起作用?

c# - LINQ 选择多个值

c# - 如何在不存在的文件夹中自动创建文件?

mysql - 在 Yii 中查询大数据?

scala - 使用这些集合中元素的增量阴影计算每个元素上的函数的最佳方法

python - 检查给定键是否已存在于字典中并将其递增