RPM*_*984 16 c# caching .net-4.0 objectcache
我有一个像这样缓存的简单对象:
_myCache.Add(someKey, someObj, policy);
Run Code Online (Sandbox Code Playgroud)
在哪里_myCache
声明为ObjectCache
(但通过DI注入MemoryCache.Default
),someObj
是我正在添加的对象,并且policy
是CacheItemPolicy
.
如果我有CacheItemPolicy
这样的:
var policy = new CacheItemPolicy
{
Priority = CacheItemPriority.Default,
SlidingExpiration = TimeSpan.FromHours(1)
};
Run Code Online (Sandbox Code Playgroud)
这意味着它将在1小时后到期.凉.
但会发生的事情是,一小时后不幸的第一个用户将不得不等待命中.
有什么方法可以挂钩到"过期"事件/委托并手动刷新缓存?
我看到有一个提到,CacheEntryChangeMonitor
但在我的例子中找不到任何有意义的doco /例子如何利用它.
PS.我知道我可以CacheItemPriority.NotRemovable
手动使用和过期,但我不能在我当前的例子中这样做,因为缓存的数据有点太复杂(例如,我需要在我的代码中的10个不同位置"无效").
有任何想法吗?
BFr*_*ree 16
CacheItemPolicy
被叫的属性RemovedCallback
是:CacheEntryRemovedCallback
.不知道为什么他们没有走标准的赛道路线,但那应该做你需要的.
http://msdn.microsoft.com/en-us/library/system.runtime.caching.cacheitempolicy.removedcallback.aspx
小智 5
这次聚会晚了,但是我刚刚注意到CacheItemUpdate和CacheItemRemove回调之间的有趣区别。
http://msdn.microsoft.com/zh-CN/library/system.web.caching.cacheitemupdatereason.aspx
特别是此评论:
与CacheItemRemovedReason枚举不同,此枚举不包括Removed或Underused值。可更新的缓存项不可移动,因此即使需要释放内存,ASP.NET也无法将其自动删除。