最適化が必要な計算コストの高いアプリケーション (NLP 機械学習タスク) をコーディングしています。
私のコードには多くの for ループがあるため、Parallel.For
(およびそのバリアント) を使用して最も外側のループを並列化しました。また、配列とDictionary
s を使用して、コストを大幅に削減するいくつかのインデックスを作成しました。
VS2010 のプロファイラーは、アプリケーションがほとんどの時間をDictionary.TryGetValue()
(インデックスの副産物である) に費やすことを示しました。
これは、私がもっとうまくやれるかどうかという疑問を投げかけます。そしてどうやって?
私の最初の質問は、私のシナリオConcurrentDictionary.TryGetValue
よりも優れ
たパフォーマンスを発揮する一般的なコンセンサスがあるかどうかです。Dictionary.TryGetValue
.NET のコレクションよりもうまくいかない可能性があるため、独自のハッシュマップをコーディングする気はありません。しかし、私のシナリオでより高速なルックアップを保証するライブラリはありますか?
おそらく、ハッシュコードの実装が速度を落としているのでしょうか?