我查看了一些示例代码,其中使用了一个ListDictionary对象来存储少量数据(大约5-10个对象,但这个数字可能会随着时间的推移而变化)。我使用这个类的唯一问题是,与我所做的其他所有事情不同的是,它不是泛型的。这意味着,如果我错了,请纠正我,每次我从这里获取一个对象,或者枚举它的时候,都会进行强制转换。较大的Dictionary<T>对象中是否有足够的开销来调整非泛型ListDictionary的开销
将使用此对象的代码将在每次页面加载时被枚举,我猜这就是为什么使用ListDictionary类而不是其他替代类的原因。这也是为什么我想从这个数据列表中获得最大的性能。
发布于 2009-08-05 18:16:26
不幸的是,没有ListDictionary的通用等价物。
然而,实现一个应该不是很困难。ListDictionary本质上是通过保存键/值对的链表并迭代它们进行查找操作来工作的。您可以通过使用一些非常简单的LINQ表达式包装LinkedList<T>来构建ListDictionary<TKey,TValue>。
例如
public class LinkedDictionary<TKey,TValue> {
private LinkedList<KeyValuePair<TKey,TValue>> _list = new LinkedList<KeyValuePair<TKey,TValue>>();
private IEqualityComparer<TKey> _comp = EqualityComparer<TKey>.Default;
public void Add(TKey key, TValue value) {
_list.Add(new KeyValuePair<TKey,TValue>(key,value));
}
public TValue Get(TKey key) {
return _list.Where(x => _comp.Equals(x.Key,key)).First().Value;
}
...
}发布于 2009-08-05 18:15:41
如果存储在ListDictionary中的数据总是对象(类),而不是值类型,那么它可能会比字典更快。如果您要存储值类型(structs、int、double等),那么装箱/拆箱的成本很可能会平衡一切,我建议您使用字典。
但是,总的来说,我要指出的是,这两者之间的性能差异可能是您的总体性能问题中最小的。当涉及到性能优化时,像这样的小事情通常是最不需要担心的。在关心ListDictionary和字典之间的微小性能差异之前,应该首先解决更大规模的事情,如进程间调用、数据库和web服务交互等。
发布于 2017-03-24 05:42:06
没有ListDictionary的通用等价物。
如果您对这个小字典的使用不是由Add和Remove主导的,那么您可以考虑SortedList,尽管它的名称是IDictionary<TKey, TValue>,但它实现了IDictionary<TKey, TValue>。与由单链表支持的ListDictionary不同,SortedList由一个排序的键数组和一个数组值支持。
https://stackoverflow.com/questions/1234831
复制相似问题