私がいくつかの機能を持っているとしましょうFunc<int,int,int>
。次に、関数の結果をキャッシュ(およびすばやくルックアップ)したいと思います。
要件:
- 固定キャッシュサイズ(たとえば、1000トリプル(入力、入力、結果))。
- キャッシュ内の高速ルックアップと高速ストレージ。
- キャッシュがいっぱいの場合は、最も長い間アクセス(ルックアップ)されていないエントリを削除する必要があります。
どのようなデータ構造を使用する必要がありますか?
私がいくつかの機能を持っているとしましょうFunc<int,int,int>
。次に、関数の結果をキャッシュ(およびすばやくルックアップ)したいと思います。
要件:
どのようなデータ構造を使用する必要がありますか?
.NET Cacheを使用するか、非 Web 固有のキャッシュであるMemoryCacheを使用します。
CacheMemoryLimitプロパティを使用して、キャッシュで使用できるメモリの量を指定できます。
キャッシュがいっぱいになったら、必要な割合のエントリをトリムできます。エントリは必要に応じて削除されます。
... エントリは、要求されたトリム パーセンテージに達するまで、LRU (least-recently used) アルゴリズムに基づいてキャッシュから削除されます
キャッシュ内の各アイテムのキーは文字列である必要があるため、入力を次のようにフォーマットします{0}-{1}
。要件を満たすためにいくつかのパフォーマンス テストを実行することをお勧めしますが、これは他のソリューションと同じくらい高速であると確信しています。