何时使用混合词典而不是其他词典类型
本文关键字:其他 类型 何时使 混合 | 更新日期: 2023-09-27 18:31:06
我正在查看MSDN中用于.Net框架的Collection
类。我遇到了HybridDictionary
,它说(http://msdn.microsoft.com/en-us/library/system.collections.specialized.hybriddictionary.aspx):
通过在集合较小时使用 ListDictionary 来实现 IDictionary,然后在集合变大时切换到哈希表。
所以我想知道哪个ListDictionary
状态(http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx)
建议用于通常包含少于 10 个项目的集合。
现在对我来说,这似乎是任意数量的(项目)。我在文档中找不到这背后的机制是什么,我怀疑性能边界与许多项目有关,例如 2^N(2 的 N 的幂)。
现在我确实经常使用Dictionary
的集合类型,集合可能包含 10 到 30 个项目,50 个顶部,具体取决于"页面大小"。
但是HybridDictionary
和ListDictionary
需要拆箱,并且没有通用类型的构造器。
我在任何地方都找不到关于HybridDictionary
与Dictionary
性能的比较.
那么什么时候实际使用此HybridDictionary
而不是其他字典类型呢?
附言如果HybridDictionary
在项目数量增加时切换到ListDictionary
或HashTable
以优化其功能。为什么要使用ListDictionary
?如果软件中的某些需求发生变化,突然在ListDictionary
中最多必须放入 20 个项目,而不是最多 10 个项目,必须重构代码以HybridDictionary
以保持性能?
何时使用混合词典而不是其他词典类型?
当您确定集合大小将小于 10 个项目时,可以使用ListDictionary
。
HybridDictionary
与Dictionary
几乎相同,但当集合大小小于 10 个项目时,将利用ListDictionary
的性能。一旦集合增长到 10 以上,HybridDictionary
将从内部使用ListDictionary
切换到像普通Dictionary
一样使用HashTable
。
因此,何时使用一个,如果您的收藏通常少于 10 件,但有时可能会变得更大,那么HybridDictionary
将是要使用的一个。
例如,我们在移动设备应用程序通信层中使用HybridDictionary
,通信消息队列几乎总是低于 10 个项目,但如果后端服务器中断,通信消息将累积到 100 或 1000,具体取决于服务器关闭的时间,在这种情况下ListDictionary
会很糟糕, 在这种情况下,HybridDictionary
将切换到HashTable
以保持性能,并在低于 10 时仍能为我们提供最大性能。
所以它用于专门的地方,因此它所属的命名空间System.Collections.Specialized
:)