簡潔に言うと、.Net エコシステムにはどの SIMPLE インメモリ キャッシュが存在しますか?
私が探しているのは:
- 構成なし (単純な API 呼び出し以外)。展開が複雑になるだけなので、外部構成ファイルを台無しにしたくありません。
- 同じプロセス (一部の外部プロセスまたはサーバーではありません)。次のように簡単に作成できることが望ましい
var myCache = new SimpleCache(1024 * 1024 * 100); // 100 MB
- 指定されたメモリ制限
- 最小使用量に基づいてキャッシュから削除されたアイテム
- 時間ベースの有効期限 (必須ではありませんが、他のシナリオで役立つ可能性があります)
- .Net 3.5 で動作
私はすでにこれらのオプションを再調査しました:
- ASP.Net System.Web.Caching
- その API は、キャッシュのサイズに対するいかなる種類の制御もサポートしておらず、使用状況に基づく優先順位もサポートしていません。したがって、キャッシュを空にするのに十分なメモリ プレッシャがあるといつ判断するかについては、完全に翻弄されます。
- System.Runtime.Caching
- これは .Net 4.0 で追加されたオプションではなく、この投稿はパフォーマンスが低いことを示しているようです: system.runtime.caching のパフォーマンス
- Microsoft Enterprise Library - キャッシュ ブロック
- 重いという評判があることを除けば、XML ファイルや app.config を使用した構成が好きではありません。さらに、格納されているオブジェクトの数に基づいてキャッシュのサイズを制限することはサポートしていますが、それらのオブジェクトのサイズを制限するメカニズムはありません。
- Nキャッシュ
- おそらく私が望むユースケースにはやり過ぎですが、最も重要なことは、それが有料の製品であり、私が対処したくないものであるということです(私が1日か2日に1つ書いているのと比較して)。いつものように、高速版には使用制限があり、生産目的での使用を思いとどまらせます。
- MemCacheD
- 私が望むものとは正反対(外部分散プロセス)
私は Google Protocol Buffers (protobuf-net) を使用しているので、各項目のメモリ フットプリントを比較的正確に見積もっています。データベース アクセスから返されたデータをキャッシュしていますが、正式な ORM を使用する必要はありません (実際には PetaPoco を使用していますが、それは重要ではありません)。
この段階で、二重リンク リストとハッシュ (辞書) を使用して独自のキャッシュを実装することを計画しており、キャッシュの制限に達したときに、最近使用されていないアイテムをキャッシュから削除できるようにします。ただし、自分で作成する前に、誰かが適切なオプションを知っているかどうかを確認したかった.