什么时候发生.NET的MemoryCache逐出?如何在控制台应用程序中模拟逐出?每当我尝试将对象添加到内存缓存中,直到发生逐出操作,我就会得到OutOfMemoryException。
最佳答案
请参见MemoryCacheElement
,如果您不将值传递给NameValueCollection config
in the constructor或使用默认实例,则默认行为由它控制。
通过查看MemoryCacheElement
的默认值,它每两分钟检查一次(但是它的速度确实更快the closer you are to the high pressure limit)。一旦进入timer's callback中,它将计算出要修剪memoryCache的百分比,然后使用计算出的百分比调用MemoryCache.Trim(Int32)
。
在the percentage calculation中需要注意的一点是,如果没有发生第2代垃圾回收,则缓存不会尝试收缩自身。
测试控制台程序运行的方式很可能在第2代收集发生之前耗尽了所有内存,或者在清除项目之前仍处于初始的两分钟慢模式以检查内存压力。
如果你想模拟驱逐,只要打电话
MemoryCache.Default.Trim(50);
这将从默认缓存中逐出一半的缓存。
关于c# - 点净内存缓存逐出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41968043/