我正在编写一个需要优化的计算量大的应用程序(NLP 机器学习任务)。
因为我的代码有很多 for 循环,所以我使用了 Parallel.For
(和变体)来并行化最外层的循环。
我还使用数组和 Dictionary
构建了一些索引,这大大降低了成本。
VS2010 的分析器表明应用程序大部分时间都花在 Dictionary.TryGetValue()
(这是索引的副产品)中。
这引出了我是否可以做得更好的问题?以及如何?
我的第一个问题是是否普遍认为 ConcurrentDictionary.TryGetValue
比
Dictionary.TryGetValue
在我的场景中——很多读者,没有作者?
我没有动力编写自己的 HashMap ,因为它可能比 .NET 的集合更糟糕。但是是否有任何库可以保证更快地查找我的场景?
也许哈希码的实现正在减慢速度?
最佳答案
Dictionary.TryGetValue根据 MSDN 的说法,已经进行了很好的优化:
This method approaches an O(1) operation.
你没有提到你的字典的键是什么,如果你使用自定义类型,确保你已经实现了它的 GetHashCode方法正确,因为字典和哈希表依赖它并广泛使用它。
关于c# - 优化 Dictionary.TryGetValue(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16580912/