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

时间:2013-09-13 06:14:07

标签: c# performance dictionary collections

我正在查看.Net框架的MSDN中的Collection类。 我遇到了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个顶部,具体取决于“页面大小”。

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

我找不到关于HybridDictionaryDictionary的效果的任何比较。

那么何时实际使用此HybridDictionary而不是其他Dictonary类型?

P.S。如果项目数量增加以优化其功能,HybridDictionary会切换到ListDictionaryHashTable。为什么要使用ListDictionary?如果软件中的某些要求发生变化,并且突然最多必须在ListDictionary中放入20个项目,而不是最多10个项目,则必须将代码重新计算到HybridDictionary以维护性能

1 个答案:

答案 0 :(得分:31)

  

何时使用HybridDictionary而非其他词典类型?

如果您确定收藏品的尺寸少于10件,则可以使用ListDictionary

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

所以什么时候使用,如果你的收藏品通常不超过10件,但有时可能会变大,那么HybridDictionary就是那个。

例如,我们在移动设备应用程序通信层中使用HybridDictionary,通信消息队列几乎总是不到10项,但如果有后端服务器中断,则通信消息将构建到100或1000取决于服务器关闭的时间长度,此方案中的ListDictionary会很糟糕,在这种情况下,HybridDictionary会切换到HashTable以保持性能提升并仍然给予我们在10岁以下时的最高表现。

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