我正在寻找.Net框架的MSDN中的Collection
类。
我遇到了HybridDictionary
并指出(http://msdn.microsoft.com/en-us/library/system.collections.specialized.hybriddictionary.aspx):
所以我想知道ListDictionary
声明(http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx)
现在,对我来说,这似乎是一个任意数字。我在文档中找不到背后的机制,我怀疑性能的边界可能与许多项有关,例如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
切换为使用HashTable
,就像普通的Dictionary
一样。
因此,何时使用一个,如果您的收藏集通常少于10个项目,但有时可能会更大,那么HybridDictionary
将是一个使用对象。
例如,我们在移动设备应用程序comms层中使用HybridDictionary
,comms消息队列几乎总是少于10个项目,但是如果后端服务器中断,则comms消息将累积为100或1000,具体取决于多长时间服务器关闭,这种情况下的ListDictionary
会很糟糕,在这种情况下HybridDictionary
将切换到HashTable
以保持性能,并在10以下时仍能为我们提供最佳性能。
因此,它在专门的地方使用,因此它属于System.Collections.Specialized
的 namespace :)