我正在查看 .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 个顶部,具体取决于“页面大小”。
但是 HybridDictionary
和 ListDictionary
需要拆箱并且没有通用类型构造函数。
我无法在任何地方找到关于 HybridDictionary
与 Dictionary
性能的比较。
那么什么时候真正使用这个 HybridDictionary
而不是其他 Dictonary 类型?
附言如果 HybridDictionary
在项目数量增加时切换到 ListDictionary
或 HashTable
以优化其功能。为什么要使用 ListDictionary
?如果软件中的某些要求发生变化,突然最多 20 个项目必须放入 ListDictionary
,而不是最大数量的 10 个项目,则代码必须重构为 HybridDictionary
保持性能?
最佳答案
When to use a HybridDictionary over other Dictionary types?
当您确定集合大小将少于 10 个项目时,您将使用 ListDictionary
。
HybridDictionary
与 Dictionary
几乎相同,但当集合大小小于 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/