用于键值查找的更简单的数据结构?

Had*_*adi 2 c# memory lookup performance dictionary

对于一小组键/值对(默认值2,最大值为5),a Dictionary<TKey, TValue>似乎有点矫枉过正.是否有一个更简单的数据结构可以在我的情况下使用?我正在为某些对象(即<MyClass, double>)缓存计算值,因此检索速度很重要.

谢谢

Jon*_*eet 8

List<KeyValuePair<TKey, TValue>>在这种情况下,A (用适当的容量创建)可能也会起作用......但它不会非常惯用.(为了清楚起见,你只需要调用Equals每个关键元素,完全忽略哈希码.)如果List<T>对你感觉有点沉重,你甚至可以根据KeyValuePair<TKey, TValue>[]需要调试.哎呀,但是嘿......这是你的代码.

你真的试过Dictionary<TKey, TValue>,发现它太慢了吗?"看起来像矫枉过正"似乎并不像"我已经尝试过它,描述它,并且发现我的应用程序的时间花费在创建词典并在其中查找条目而花费了不可接受的数量.我需要我的应用程序有性能特征X,此刻我只有Y."

如果您的密钥类型具有特定的排序(如果您要对数据结构执行比创建实例更多的查找),则可以对列表进行排序,这意味着对于任何特定查找,您最多可以进行3次比较.只有5个条目,你甚至可以硬编码所有潜在的路径,如果你想要优化到剑柄.(你甚至可能对2,3,4和5个元素有不同的实现.虽然它在这一点上变得有些愚蠢.)这基本上是一个SortedList<TKey, TValue>实现,但你可能能够为你的场景优化它一些条目.同样,首先尝试内置类型是值得的.

重要的是你知道你的代码部分对你的整体表现有多么重要 - 以及它何时"足够好"以便你能够适当地停止.