我正在编写一个计算密集型应用程序(自然语言处理机器学习任务),需要进行优化。
由于我的代码有很多for循环,我使用了Parallel.For(以及其变体)并行化最外层的循环。我还使用数组和Dictionary来构建一些索引,这大大降低了成本。
VS2010的分析器显示,该应用程序在Dictionary.TryGetValue()中花费了大部分时间(这是索引的副产品)。
这引出了一个问题:我能否做得更好?如何做到更好呢?
我的第一个问题是,在我的情况下,是否有普遍共识,即ConcurrentDictionary.TryGetValue比Dictionary.TryGetValue表现更好 - 读取者众多,但没有写入者?
我没有动力编写自己的哈希映射,因为它可能不如.NET的集合。但是是否有任何库保证我的情况下查找速度更快?
也许哈希码实现会拖慢速度?
O(1)
并不完全等同于“非常优化”。我可以在一个方法的开头加入Thread.Sleep(60000)
,仍然可以合理地声称它是O(1)
。;p - Marc Gravell