8

簡潔に言うと、.Net エコシステムにはどの SIMPLE インメモリ キャッシュが存在しますか?

私が探しているのは:

  • 構成なし (単純な API 呼び出し以外)。展開が複雑になるだけなので、外部構成ファイルを台無しにしたくありません。
  • 同じプロセス (一部の外部プロセスまたはサーバーではありません)。次のように簡単に作成できることが望ましい
    var myCache = new SimpleCache(1024 * 1024 * 100); // 100 MB
  • 指定されたメモリ制限
  • 最小使用量に基づいてキャッシュから削除されたアイテム
  • 時間ベースの有効期限 (必須ではありませんが、他のシナリオで役立つ可能性があります)
  • .Net 3.5 で動作

私はすでにこれらのオプションを再調査しました:

  • ASP.Net System.Web.Caching
    • その API は、キャッシュのサイズに対するいかなる種類の制御もサポートしておらず、使用状況に基づく優先順位もサポートしていません。したがって、キャッシュを空にするのに十分なメモリ プレッシャがあるといつ判断するかについては、完全に翻弄されます。
  • System.Runtime.Caching
  • Microsoft Enterprise Library - キャッシュ ブロック
    • 重いという評判があることを除けば、XML ファイルや app.config を使用した構成が好きではありません。さらに、格納されているオブジェクトの数に基づいてキャッシュのサイズを制限することはサポートしていますが、それらのオブジェクトのサイズを制限するメカニズムはありません。
  • Nキャッシュ
    • おそらく私が望むユースケースにはやり過ぎですが、最も重要なことは、それが有料の製品であり、私が対処したくないものであるということです(私が1日か2日に1つ書いているのと比較して)。いつものように、高速版には使用制限があり、生産目的での使用を思いとどまらせます。
  • MemCacheD
    • 私が望むものとは正反対(外部分散プロセス)

私は Google Protocol Buffers (protobuf-net) を使用しているので、各項目のメモリ フットプリントを比較的正確に見積もっています。データベース アクセスから返されたデータをキャッシュしていますが、正式な ORM を使用する必要はありません (実際には PetaPoco を使用していますが、それは重要ではありません)。

この段階で、二重リンク リストとハッシュ (辞書) を使用して独自のキャッシュを実装することを計画しており、キャッシュの制限に達したときに、最近使用されていないアイテムをキャッシュから削除できるようにします。ただし、自分で作成する前に、誰かが適切なオプションを知っているかどうかを確認したかった.

4

4 に答える 4

3

それで、あなたはキャッシュで何をしたのですか?

私が取り組んでいた Universal Cache のプロトタイプがあります。これは、キャッシュの制限がメモリ使用量ではなく容量 (項目数) によるものであることを除いて、ほとんどのことを行いますが、それにはローカル永続性という追加機能があります。

キャッシュはレイヤーごとに構造化されており、単一レイヤー: メモリー、二重レイヤー: メモリー + ローカル永続性、または三重レイヤー: メモリー + ローカル永続性 + ネットワーク共有を使用できます。必要に応じてレイヤーを自由に組み合わせて使用​​できます。ネットワーク上の任意のコンピューターにインストールでき、クライアント キャッシュによって自己検出可能な .net リモート サービスとして設計されたネットワーク共有は、まだ十分に機能していません。

キャッシュは、インターフェイス ICache<TKey,TValue> を介してアクセスされるジェネリック クラスです。ローカル永続キャッシュは、SQL Express Compact 4 を使用して、TKey、タイムスタンプ、および Image 列としてシリアル化される TValue のすべてのフィールドを持つオンザフライ データベースとテーブルを作成します。複数層構成の場合、最上位キャッシュでメソッド TryGetValue( TKey key, out TValue value ) を使用すると、最初の層 (メモリ キャッシュ) に項目がない場合、次の層 (ローカル) で内部的にチェックします。データを提供するキャッシュがなくなるまで続きます。メモリ キャッシュがアイテムを破棄すると、次のキャッシュにそのレイヤーにアイテムを追加する機会が与えられるため、永続キャッシュの場合、将来のリクエストのためにデータが保存されます。

キャッシュには、ユーザー定義の保持時間パラメーター (つまり、メモリ キャッシュの場合は数分、ローカル永続キャッシュの場合は 30 日) と容量があります。

誰かが興味を持っている場合は、パブリック ドメイン コードとして投稿することがあります。

于 2012-08-30T20:03:50.310 に答える
1

AppFabric for Windows Server のキャッシュ機能はどうですか? 試してみる !http://msdn.microsoft.com/en-us/windowsserver/ee695849.aspxおよびhttp://msdn.microsoft.com/en-us/library/hh334364.aspx

ただし、必要な動作を提供する製品が市場にない場合は、デザイン パターンを使用して独自のカスタム キャッシュ レイヤーを実装する必要があります。

于 2012-06-11T21:22:29.590 に答える
1

かなり古いですが、私はあなたが話していることに似ています

メモリ消費のある汎用キャッシュ

関連するシナリオを含む別の SO を次に示します。

システム ランタイム キャッシュのパフォーマンス

于 2012-06-11T22:13:10.177 に答える