我认为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不释放存储的对象?
您应该看看CacheMemoryLimitMegabytes
酒店或PhysicalMemoryLimitPercentage
酒店。
然而,在早期版本的MemoryCache中,已经报告了检查内存压力的方式存在问题。看看this question