我认为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不会释放存储的对象?
答案 0 :(得分:1)
您应该查看CacheMemoryLimitMegabytes
属性或PhysicalMemoryLimitPercentage
属性。
然而,在早期版本的MemoryCache中,已经报告了检查内存压力的方式存在问题。看看this question