何时使用混合词典而不是其他词典类型

本文关键字:其他 类型 何时使 混合 | 更新日期: 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 个顶部,具体取决于"页面大小"。

但是HybridDictionaryListDictionary需要拆箱,并且没有通用类型的构造器。

我在任何地方都找不到关于HybridDictionaryDictionary性能的比较.

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

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

何时使用混合词典而不是其他词典类型

何时使用混合词典而不是其他词典类型?

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

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

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

例如,我们在移动设备应用程序通信层中使用HybridDictionary,通信消息队列几乎总是低于 10 个项目,但如果后端服务器中断,通信消息将累积到 100 或 1000,具体取决于服务器关闭的时间,在这种情况下ListDictionary会很糟糕, 在这种情况下,HybridDictionary将切换到HashTable以保持性能,并在低于 10 时仍能为我们提供最大性能。

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