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

问题描述 投票:1回答:1

我认为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不释放存储的对象?

c# .net caching
1个回答
1
投票

您应该看看CacheMemoryLimitMegabytes酒店或PhysicalMemoryLimitPercentage酒店。

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

© www.soinside.com 2019 - 2024. All rights reserved.