Bri*_*iec 16 .net c# generics performance
我正在查看一些示例代码,并在其中使用一个ListDictionary
对象来存储少量数据(大约5-10个对象,但这个数字可能随时间而变化).我使用这个类的唯一问题是,与我一直在做的其他事情不同,它不是通用的.这意味着,如果我在这里错了,请纠正我,每当我从这里得到一个物体或者列举它时,就会继续施放.在较大的Dictionary<T>
对象中是否有足够的开销来证明非泛型的开销ListDictionary
?
将在每个页面加载时枚举将使用此对象的代码,我猜这是为什么ListDictionary
该类被用于其他替代方案之一的原因.这也是我希望从这个数据列表中获得最佳性能的原因.
Jar*_*Par 10
不幸的是,ListDictionary没有通用的等价物.
然而,实施它并不是非常困难.ListDictionary本质上是通过保持键/值对的链接列表并迭代它们以进行查找操作来工作的.你可以建立一个ListDictionary<TKey,TValue>
通过包装一个LinkedList<T>
有一些很干脆LINQ表达式.
例如
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;
}
...
}
Run Code Online (Sandbox Code Playgroud)
没有通用的等价物ListDictionary
。
如果您对这本小字典的使用不以Add
和为主Remove
,您可能会考虑SortedList<TKey, TValue>
尽管它的名称是 ,但它实现了IDictionary<TKey, TValue>
。ListDictionary
与单链表支持的不同,SortedList
它由排序键和数组值的数组支持。