1

我做了很多测试,我的 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

MemoryCache Empty :设置后返回 null

System.Runtime.Caching.MemoryCache 奇怪的行为?

添加对象后,MemoryCache 为空

MemoryCache 不遵守配置中的内存限制

4

1 回答 1

1

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

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

于 2013-05-09T12:05:42.737 回答