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

标签 c# performance memory dictionary lookup

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

谢谢

最佳答案

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

你真的试过了吗Dictionary<TKey, TValue>发现它太慢了? “看起来有点矫枉过正”似乎不像“我已经尝试过,分析过它,发现我的应用程序花费了 Not Acceptable 时间来创建字典和查找其中的条目。我需要我的应用程序具有性能特征 X,目前我只有 Y。”

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

重要的是您知道代码的这一部分对您的整体性能有多重要 - 以及何时“足够好”以便您可以适本地停止。

关于c# - 用于键值查找的更简单的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6987308/

相关文章:

c# - 如何计算信号的过零率?

r - `if` 比 ifelse 快吗?

c# - 数据库、请求、性能、缓存

performance - 为什么嵌套的 MaybeT 会导致指数分配

python - 大数组在 numpy 中创建 MemoryError

c# - MVC4 C# - 想要将图像保存到文件夹并将 url 保存到数据库中

c# - 针对 x86 和 x64 的设置?

c# - 转置表示为 ulong 值的 4x4 矩阵(尽可能快)

javascript - 如何减少useEffect的调用次数?

caching - 是否有半共享缓存之类的东西?