我做了很多测试,我的 MemoryCache 实例在一段时间后被释放,当我调用 Get 方法时总是返回 null。我认为那是在 PollingInterval 之后。
为了模拟,您可以启动一个新的 webapp 并编写以下代码:
private static MemoryCache mem = new MemoryCache("MyCache");
protected void Page_Load(object sender, EventArgs e)
{
string key = "MyKey";
mem.Set(key, "MyValue", new CacheItemPolicy() {AbsoluteExpiration = DateTimeOffset.Now.AddDays(1), Priority = CacheItemPriority.NotRemovable});
LtrValue.Text = mem.Get(key) as string;
}
我将 PollingInterval 配置为 30 小时,似乎可行。
我认为可能是 AppDomain Unload,但经过一番调查,我认为不是这样:
1-) MSDN 说要为 ASP.NET 使用 MemoryCache:http: //msdn.microsoft.com/en-us/library/ff477235 (v=vs.100).aspx 并说 ASP.NET 4 缓存是用对象缓存:
在 ASP.NET 4 中,缓存是通过使用 ObjectCache 类实现的。
2-) AppDomain 卸载将重置静态变量,创建新的 MemoryCache 实例。
3-) 我像 MemoryCache 一样在 AppDomain Unload 上附加了一个事件(我看到了反编译的源代码),在我的测试中它没有被调用并且 memorycache 被处理掉了。
参考:
MSDN 论坛上的相同帖子:http: //social.msdn.microsoft.com/Forums/en/netfxbcl/thread/1233ffb3-6480-431b-94ca-1190f96cf5f6
http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/0a666d5e-9bda-47bd-8dd3-98d32eb5fe60