我正在編寫一個計算量很大的應用程序(NLP機器學習任務),它需要優化。優化Dictionary.TryGetValue()
由於我的代碼有很多for循環,我使用Parallel.For
(和變體)來並行化最外層的循環。 我也使用數組和Dictionary
s來構建幾個指標,大大降低成本。
VS2010的分析器顯示應用程序花費大部分時間在Dictionary.TryGetValue()
(這是索引的副產品)。
這引出了我能否做得更好的問題?如何?
我的第一個問題是,在我的場景中是否存在普遍的共識ConcurrentDictionary.TryGetValue
比 Dictionary.TryGetValue
好 - 很多讀者,沒有作家?
我沒有動力去編寫我自己的hashmap,因爲它可能比.NET的集合更糟糕。但是有沒有哪些庫可以保證我的場景更快速的查找?
也許哈希碼實現放緩了事情?
'O(1)'與「非常優化」並不完全相同。我可以將'Thread.Sleep(60000)'添加到方法的開頭,並且仍然合法地聲稱它是'O(1)'; p –
是的,您可以,但如果您在最大性能之後,則不會;)我的意思是,** TryGetValue **方法不太可能導致速度下降,但如果編碼不正確,** GetHashCode **方法可能會這樣做。 –
我已經介紹了GetHashCode方法,並且程序花費的時間少於0.1%。我想我需要用不同的方式來解決這個瓶頸問題。 – Howie