2011-02-08 28 views
13

私は新しい.NET 4.0キャッシングネームスペース:System.Runtime.Cachingを使用しています。System.Runtime.Caching.ObjectCache内のキャッシュポリシーを調べる方法

今、私は実際のアプリケーションに最適なものを見つけ出すために、新しいAPIを使ってプロトタイプ/手品をしています。それに沿って

、私は基本的には、キャッシュ内のすべてのもの、特に以下の情報アウトダンプページ(ASP.NET MVC)を作成しようとしています:

  • キャッシュキー
  • キャッシュオブジェクトを
  • キャッシュポリシー(有効期限など)
  • キャッシュの依存関係(もしあれば)

しかし、私は何かを得るように見えることはできませんキー/オブジェクトを除きます。

ここで私は、現在で遊んでいるコードです:私は「CacheItem」クラスは、私は必要な情報(有効期限、依存関係など - 少なくとも「ゲッター」など)を公開することを望んだはず

public ActionResult Index() 
{ 
    var cache = MemoryCache.Default; 

    // i can get the list of cache keys like this: 
    var cacheKeys = cache.Select(kvp => kvp.Key).ToList(); 

    // i can also get a strongly-typed "CacheItem" like this: 
    CacheItem item = cache.GetCacheItem("someKey"); 

} 

は、 。

しかし、そうではありません。それが持つものは、キー、値、地域名のプロパティです。

キャッシュ内のアイテムを調べて、必要な情報を吐き出すにはどうすればよいですか?

名前空間/クラスがありますか? ChangeMonitorクラスがあるよう

EDIT

は見えるが、再び - これは、有効期限の情報を与えるものではありません、それだけでキャッシュ項目が削除されたときのイベントをサブスクライブすることができます。

ここでは、キャッシュ内のアイテムを取得する方法と、期限が切れたときにする必要があります。

EDIT 2

が、これは別々の問題であるべきかどうかを知るだけでなく、しないでください - 私はどのような生涯私は私のObjectCacheを与えるべきへと困惑しています。 MSDNによると、これはシングルトンではなく、実際には複数のObjectCacheインスタンスを作成できます。それはどういう意味ですか、ObjectCacheインスタンスにアクセスするときに完全にロックされたシングルトンを使用する必要がありますか?

答えて

9

キャッシュコレクションに追加されたCacheItemPolicyを取得する方法はありません。

これを回避する最も良い方法は、ポリシーオブジェクトをキャッシュし、後でポリシーを取得できるように、キャッシュする項目とともに「ポリシー」をキー名に追加することです。これは、明らかに、最初にキャッシュにアイテムを実際に追加することを制御していることを前提としています。以下の例:

public ActionResult Index() 
    { 
     string key = "Hello"; 
     string value = "World"; 

     var cache = MemoryCache.Default; 
     CacheItemPolicy policy = new CacheItemPolicy(); 
     policy.AbsoluteExpiration = DateTime.Now.AddDays(1); 
     cache.Add(new CacheItem(key, value), policy); 
     cache.Add(new CacheItem(key + "Policy", policy), null); 

     CacheItem item = cache.GetCacheItem(key); 
     CacheItem policyItem = cache.GetCacheItem(key + "Policy"); 
     CacheItemPolicy policy2 = policyItem.Value as CacheItemPolicy; 

     ViewBag.Message = key + " " + value; 

     return View(); 
    } 
+0

私はこれについて考えました。たぶんプロトタイプのために、私はこれを行います - そして、終了したらコードを正常に戻してください。それでも、私はライブサーバー上の軽量キャッシュモニタープログラムを望んでいました - それは可能ではないように思えます。 – RPM1984

関連する問題