net的MemoryCache驱逐是什么时候发生的?如何在控制台应用中模拟驱逐?每当我尝试将对象添加到内存缓存中,直到发生驱逐时,我都会得到OutofMemoryException。
发布于 2017-02-01 06:47:23
请参见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代垃圾回收,则缓存不会尝试收缩自身。
您的测试控制台程序的运行方式很可能在Gen 2收集发生之前耗尽了所有内存,或者仍然处于初始的两分钟慢模式,以便在清除项目之前检查内存压力。
如果您想要模拟驱逐,只需调用
MemoryCache.Default.Trim(50);这将从默认高速缓存中逐出一半的高速缓存。
https://stackoverflow.com/questions/41968043
复制相似问题