【发布时间】:2018-08-27 17:16:22
【问题描述】:
这是我的情况:
我正在使用字典对象来存储一些键,然后基于对象中存在的键,代码正在执行一些动作。
到目前为止,我一直在使用 - LINQ - Any() dictionaryObject.Any(x => x.Key.Equals("SomeParameter"))。在我的字典对象突然获得 200,000 个键之前,这是可行的,并且可以满足所有场景。
它开始影响性能,其他过程也是如此。
然后我意识到,有一个字典方法ContainsKey("SomeParameter"),使用后,性能确实提高了。
现在我更感兴趣的是 ContainsKey 与 LINQ Any 的不同之处,因为我下划线的代码分别使用 for 和 foreach,这意味着它循环遍历列表。
【问题讨论】:
-
ContainsKey将使用密钥的哈希值来查看字典是否包含它。这是 O(1)。Any()不使用字典查找,并且是 O(n)。 -
当您对框架方法的内部结构感到好奇时,您可以使用.NET framework reference source,或者阅读.NET API Browser 上特定框架类的文档,这解释了为什么
Dictionary查找@987654323 @。您还可以看到Any是如何实现的以及它处理的特殊情况。
标签: c# linq dictionary