dot net的MemoryCache何时会被清除?我该如何在控制台应用程序中模拟清除操作?每当我尝试向内存缓存中添加对象,直到发生清除操作时,我都会收到OutOfMemoryException异常。
dot net的MemoryCache何时会被清除?我该如何在控制台应用程序中模拟清除操作?每当我尝试向内存缓存中添加对象,直到发生清除操作时,我都会收到OutOfMemoryException异常。
MemoryCacheElement
,这就是如果您没有向构造函数传递NameValueCollection config
的值或使用默认实例时控制默认行为的内容。请参阅此处。
查看MemoryCacheElement
的默认设置,它每两分钟检查一次(但是当你接近高压限制时,速度会更快)。一旦进入计时器回调,它将计算要修剪掉内存缓存的百分比,然后使用计算出的百分比调用MemoryCache.Trim(Int32)
。
需要注意的一点是,在百分比计算中,如果没有发生第二代垃圾回收,则缓存不会尝试自行收缩。
很有可能您的测试控制台程序在运行时使用了所有内存,导致 Gen 2 回收无法发生,或者仍处于最初的两分钟缓慢模式以检查内存压力是否能够清除项目。如果您想模拟驱逐,请调用
MemoryCache.Default.Trim(50);