私は.NET 4.0アプリケーションに取り組んでいます。これは、doubleを返す2つのdoubleに対してかなり高価な計算を実行します。この計算は、数千のアイテムのそれぞれに対して実行されます。これらの計算はTask
、スレッドプールスレッドで実行されます。
いくつかの予備テストでは、同じ計算が繰り返し実行されることが示されているため、n個の結果をキャッシュしたいと思います。キャッシュがいっぱいになったら、最近使用したアイテムのうち、最も使用頻度の低いアイテムを破棄したいと思います。(編集:キャッシュがいっぱいになったときので、私は少なくとも、しばしばを実現することは、意味がないと私は1つが最も頻繁に使用されると、すぐに新しい結果が計算され、次回に置き換えられるであろうと、新たに計算されたものと結果を置き換えますキャッシュに追加されました)
これを実装するために、私はDictionary<Input, double>
(Input
2つの入力double値を格納するミニクラスになる)を使用して、入力とキャッシュされた結果を格納することを考えていました。ただし、最後に結果がいつ使用されたかを追跡する必要もあります。このためには、キャッシュがいっぱいになったときに辞書から結果を削除するために必要な情報を格納する2番目のコレクションが必要だと思います。このリストを常にソートしておくと、パフォーマンスに悪影響が出るのではないかと心配しています。
これを行うためのより良い(つまりよりパフォーマンスの高い)方法、または私が知らない一般的なデータ構造さえありますか?ソリューションの最適性を判断するには、どのようなことをプロファイリング/測定する必要がありますか?