我查看了一些示例代码,其中使用了ListDictionary
对象来存储少量数据(大约5-10个对象左右,但这个数字可能会随着时间而改变)。我使用这个类的唯一问题是,与我所做的其他事情不同,它不是通用的。这意味着,如果我错了请纠正我,每次我从这里得到一个对象,或者枚举它的时候,都会有强制类型转换在进行,在更大的Dictionary<T>
对象中是否有足够的开销来证明非泛型ListDictionary
的开销是合理的?
将使用这个对象的代码将在每次页面加载时被枚举,我猜这就是为什么ListDictionary
类被使用而不是其他替代品的原因,这也是为什么我希望这个数据列表具有最佳性能的原因。
5条答案
按热度按时间oxf4rvwz1#
不幸的是,没有ListDictionary的通用等价物。
但是实现一个应该不是很困难。ListDictionary的工作原理是保存一个键/值对的链表,并在查找操作中迭代它们。你可以通过用一些非常简单的LINQ表达式 Package
LinkedList<T>
来构建ListDictionary<TKey,TValue>
。例如
kq0g1dla2#
没有
ListDictionary
的通用等价物。如果你使用这个小字典的时候不受
Add
和Remove
的支配,你可以考虑SortedList<TKey, TValue>
,尽管它的名字叫IDictionary<TKey, TValue>
,但它实现了IDictionary<TKey, TValue>
,与ListDictionary
不同,SortedList
由一个排序键数组和一个数组值支持。2uluyalo3#
如果你存储在ListDictionary中的数据总是对象(类),而不是值类型,那么它可能比Dictionary快;如果你存储的是值类型(structs,int,double等),那么装箱/拆箱的成本很可能会平衡,我推荐Dictionary。
然而,总的来说,我想指出的是,这两者之间的性能差异可能是总体性能问题中最小的。当涉及到性能优化时,像这样的小事情通常是最不需要担心的。更大规模的事情,如进程间调用、数据库和Web服务交互,在关注ListDictionary和Dictionary之间的微小性能差异之前,应该首先解决这些问题。
8cdiaqws4#
对MSDN-ListDictionary类进行简单检查即可发现
这是一个使用单向链表的IDictionary的简单实现。如果元素的数量是10或更少,它比Hashtable更小更快。如果性能对大量元素很重要,则不应使用此方法。
ncecgwcz5#
我们可以用,
例如,考虑以下内容,
我想这个会帮你一点忙!