現在、アイテムを MemoryCache.Default インスタンスに挿入しようとしていますが、これは機能します。でもアイテムは無期限!ポーリング間隔はデフォルト設定の 2 分で、MemoryCache に対して特定の設定は行われていません。
アイテムの追加ルーチンは次のようになります。
string key = "someKey";
var faultyItem = GetFaultyItemToBlockFromProcessingTheNextThreeMinutes();
if (!MemoryCache.Default.Contains(key))
{
MemoryCache.Default.Add(
new CacheItem(key, faultyItem),
new CacheItemPolicy()
{
AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(3)
});
}
ただし、アイテムがキャッシュ内で期限切れになることはありません。10 分以上待ちましたが、まだキャッシュに残っています。主な目的は、クエリを数秒ごとに処理しようとすることで、データベースがクエリであふれないようにすることです。それらは数秒ごとにチェックされますが、SlidingExpiration はありません。最大遅延はまだ許容できるため、約 3 分後、5 分後に再度チェックする必要があります。
XMLなどで、コード外で構成を行いたくありません。それが不可能な場合、MemoryCache に代わる良い方法はありますか? おそらく、数値/オブジェクトキーと、パラメーターとプロパティによる構成でしょうか?