MemoryCache神奇地进入Disposed状态

时间:2012-09-04 01:27:50

标签: c# asp.net .net base-class-library memorycache

我做了很多测试,我的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卸载,但经过一些调查我不认为是这样:

1-)MSDN说要使用MemoryCache for ASP.NET:http://msdn.microsoft.com/en-us/library/ff477235(v=vs.100).aspx 并说ASP.NET 4缓存是使用ObjectCache构建的:

在ASP.NET 4中,使用ObjectCache类实现缓存。

2-)AppDomain unload将重置静态变量,创建新的MemoryCache实例。

3-)我将一个事件附加到AppDomain卸载,就像MemoryCache一样(我看到反编译的源代码)在我的测试中它没有被调用,而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

MemoryCache Empty : Returns null after being set

System.Runtime.Caching.MemoryCache strange behavior?

MemoryCache empty just after adding an object

MemoryCache does not obey memory limits in configuration

1 个答案:

答案 0 :(得分:1)

它确实是一个错误,它已在.NET 4.5中修复,并且它们正在努力反向移植到.NET 4

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/1233ffb3-6480-431b-94ca-1190f96cf5f6/