c# - 优化 Dictionary.TryGetValue()

标签 c# multithreading .net-4.0

我正在编写一个需要优化的计算量大的应用程序(NLP 机器学习任务)。

因为我的代码有很多 for 循环,所以我使用了 Parallel.For(和变体)来并行化最外层的循环。 我还使用数组和 Dictionary 构建了一些索引,这大大降低了成本。

VS2010 的分析器表明应用程序大部分时间都花在 Dictionary.TryGetValue()(这是索引的副产品)中。

这引出了我是否可以做得更好的问题?以及如何?

我的第一个问题是是否普遍认为 ConcurrentDictionary.TryGetValueDictionary.TryGetValue 在我的场景中——很多读者,没有作者?

我没有动力编写自己的 HashMap ,因为它可能比 .NET 的集合更糟糕。但是是否有任何库可以保证更快地查找我的场景?

也许哈希码的实现正在减慢速度?

最佳答案

Dictionary.TryGetValue根据 MSDN 的说法,已经进行了很好的优化:

This method approaches an O(1) operation.

你没有提到你的字典的键是什么,如果你使用自定义类型,确保你已经实现了它的 GetHashCode方法正确,因为字典和哈希表依赖它并广泛使用它。

关于c# - 优化 Dictionary.TryGetValue(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16580912/

相关文章:

dns - .NET 4.0 上的 System.Net.Dns.GetHostEntry(dnsServer) 问题

c# - 如何在 .aspx 网页中使用 C# 字符串?

c# - 下拉列表 - MVC3

swift - 核心数据多线程问题

C-用户级线程库示例

entity-framework - 如何从 Entity Framework 中的关系对象获取数据?

c# - 如何从 .NET 代码向 .NET Windows 服务发送自定义命令?

c# - 在 .NET Web 应用程序中生成的 XML 文件在本地工作,但内容在生产中为空

c# - 提交按钮没有按预期工作

multithreading - Clojure并行计算数组