.net 4.5を使用してさまざまなアイテムを追跡し、自動的に更新しようとしていますがMemoryCache
、何を設定しても、AbsoluteExpiration
常に15秒以上で期限切れになるようです。
キャッシュアイテムを5秒ごとに期限切れにしたいのですが、常に少なくとも15秒で期限切れになります。有効期限をタイムアウトにすると、15秒+更新間隔のようになりますが、15秒以上になることはありません。 。
表示されていない内部タイマーの解像度はありますか?反映されたコードを少し調べたところ、System.Runtime.Caching.MemoryCache
目立ったものは何もありませんでした。インターネット上でこの問題を抱えている人を見つけることはできませんでした。
問題を説明する非常に基本的な例を以下に示します。
私が望んでいるのは、CacheEntryUpdate
5秒ごとにヒットし、新しいデータで更新することですが、私が言ったように、15秒以上でヒットするだけです。
static MemoryCache MemCache;
static int RefreshInterval = 5000;
protected void Page_Load(object sender, EventArgs e)
{
if (MemCache == null)
MemCache = new MemoryCache("MemCache");
if (!MemCache.Contains("cacheItem"))
{
var cacheObj = new object();
var policy = new CacheItemPolicy
{
UpdateCallback = new CacheEntryUpdateCallback(CacheEntryUpdate),
AbsoluteExpiration = DateTimeOffset.UtcNow.AddMilliseconds(RefreshInterval)
};
var cacheItem = new CacheItem("cacheItem", cacheObj);
MemCache.Set("cacheItem", cacheItem, policy);
}
}
private void CacheEntryUpdate(CacheEntryUpdateArguments args)
{
var cacheItem = MemCache.GetCacheItem(args.Key);
var cacheObj = cacheItem.Value;
cacheItem.Value = cacheObj;
args.UpdatedCacheItem = cacheItem;
var policy = new CacheItemPolicy
{
UpdateCallback = new CacheEntryUpdateCallback(CacheEntryUpdate),
AbsoluteExpiration = DateTimeOffset.UtcNow.AddMilliseconds(RefreshInterval)
};
args.UpdatedCacheItemPolicy = policy;
}