Dot Net内存缓存清除机制

8

dot net的MemoryCache何时会被清除?我该如何在控制台应用程序中模拟清除操作?每当我尝试向内存缓存中添加对象,直到发生清除操作时,我都会收到OutOfMemoryException异常。


可能是 MemoryCache does not obey memory limits in configuration 的重复问题。 - Joe Amenta
1个回答

11
查看 MemoryCacheElement,这就是如果您没有向构造函数传递NameValueCollection config的值或使用默认实例时控制默认行为的内容。请参阅此处

查看MemoryCacheElement的默认设置,它每两分钟检查一次(但是当你接近高压限制时,速度会更快)。一旦进入计时器回调,它将计算要修剪掉内存缓存的百分比,然后使用计算出的百分比调用MemoryCache.Trim(Int32)

需要注意的一点是,在百分比计算中,如果没有发生第二代垃圾回收,则缓存不会尝试自行收缩。

很有可能您的测试控制台程序在运行时使用了所有内存,导致 Gen 2 回收无法发生,或者仍处于最初的两分钟缓慢模式以检查内存压力是否能够清除项目。

如果您想模拟驱逐,请调用

MemoryCache.Default.Trim(50);

那将会从默认缓存中驱逐一半的缓存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接