2011-10-28 8 views
8

私は自分自身が正しくクリーンアップされなかったCacheItemに見つかりました。「Priority」と「AbsoluteExpiration」のキャッシュはどのように連携しますか?

AbsolutExpirationはの「キープアライブ」を設定するために使用されます。MSDNを見て、UTCベースの計算を使用してに自分自身を修正している間、私はこの混乱の情報を見つけましたCacheItemPriority.NotRemovableは、CacheItemを永遠に強制的に使用するために使用されます。どのプロパティが他のプロパティをオーバーライドするかについての通知はありません。

以下のコードはコンパイルされ、SQLプロファイラはデータベースが1回だけクエリされることを確認し、他のすべての要求はキャッシュから取得されたことを確認します。

CacheItemPolicy _cachePolicy = new CacheItemPolicy() 
{ 
    AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)), 
    Priority = CacheItemPriority.NotRemovable 
}; 

私はこのコード力のキャッシュアイテムは永遠にとどまることなく、設定に関するMSDNのノートに沿ったもので、作成から12時間後にクリアされていることを前提としています。

そして、「キャッシュ実装はキャッシュから エントリを立ち退かせるために、キャッシュエントリの数を管理するための方法を提供した場合にのみ キャッシュエントリのNotRemovable優先度を設定する必要があり、キャッシュの実装」他の面では、なぜ両方のプロパティが一体となって動作するのでしょうか?この実装は、「より多くの非リムーバブル」なんかをもたらしますか?

+0

不明なドキュメントのおかげで、私は自分自身が不思議でした。私の場合、キャッシュされたエントリは、有効期限が切れる前にキャッシュが大量に掃除されないように期限切れになるまで削除されないようにします。 –

答えて

5

したがって、thisによると、 "NotRemovable"はキャッシュエントリが自動的に削除されることを防ぎます(キャッシュが空き領域を使い果たしている場合など)。ただし、有効期限が切れたり手動でキャッシュから取り除いたりします。サーバーがシステムメモリを解放するように、この優先度の

NotRemovableキャッシュ項目がキャッシュから自動的に削除されることはありません。ただし、この優先レベルのアイテムは、アイテムの絶対有効期限または有効期限切れ期限に応じて他の項目と共に削除されます。

+0

あなたの答えは、質問で尋ねられる 'System.Runtime.Caching.CacheItemPriority'ではなく、' System.Web.Caching.CacheItemPriority'を参照しています。あなたの答えを編集または削除してください - これは非常に誤解を招くことです。 (私はあなたの答えを見つけたときに私はMSDNを見ていた、それは私が気づいた唯一の理由です)。 – xxbbcc

関連する問題