24

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

通过在集合较小时使用 ListDictionary 实现 IDictionary,然后在集合变大时切换到 Hashtable。

所以我想知道ListDictionary哪些州(http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx

推荐用于通常包含少于 10 个项目的集合。

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

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

但是HybridDictionary并且ListDictionary需要拆箱,并且它们没有通用类型构造函数。

我在任何地方都找不到关于 a HybridDictionaryvs性能的比较Dictionary

那么什么时候实际使用它HybridDictionary而不是其他字典类型呢?

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

4

1 回答 1

36

何时在其他字典类型上使用 HybridDictionary?

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

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

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

例如,我们HybridDictionary在移动设备应用程序的通讯层中使用,通讯消息队列几乎总是在 10 条以下,但如果后端服务器中断,通讯消息将根据发送时间长短增加到 100 条或 1000 条。服务器已关闭,ListDictionary在这种情况下 a 会很糟糕,在这种情况下HybridDictionary将切换到 aHashTable以保持性能,并且在它低于 10 时仍然为我们提供最佳性能。

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

于 2013-09-13T06:55:40.967 回答