当内存不足时,为什么没有MemoryCache免费项目?

时间:2017-12-31 04:14:56

标签: c# .net caching

我认为MemoryCache类的工作方式是,只要仍然满足CachePolicy,只要内存条件允许,它就会保存在内存中的任何内容。

在运行一些测试之后,我不确定当内存条件很低时,MemoryCache会采取任何措施。

我可以在控制台应用中运行以下代码:

        MemoryCache cache = MemoryCache.Default;
        CacheItemPolicy p = new CacheItemPolicy()
        {
            AbsoluteExpiration = ObjectCache.InfiniteAbsoluteExpiration
        };

        for (int i=0; i < 1000000; i++)
        {
            Console.WriteLine(i);
            string s = new string('0', 50000);
            cache.Add(new CacheItem(i.ToString(), s), p);
        }

在大约30K迭代之后,我得到一个System.OutOfMemoryException。

当内存条件不足时,为什么MemoryCache和GC不会释放存储的对象?

1 个答案:

答案 0 :(得分:1)

您应该查看CacheMemoryLimitMegabytes属性或PhysicalMemoryLimitPercentage属性。

然而,在早期版本的MemoryCache中,已经报告了检查内存压力的方式存在问题。看看this question