【发布时间】:2016-12-19 15:18:48
【问题描述】:
我在我的项目中使用IMemoryCache。我想知道如果我的应用程序将许多长期存在的对象推送到缓存中会发生什么。它可以占用所有可用内存吗?我可以全局定义应用的最大内存吗?
【问题讨论】:
我在我的项目中使用IMemoryCache。我想知道如果我的应用程序将许多长期存在的对象推送到缓存中会发生什么。它可以占用所有可用内存吗?我可以全局定义应用的最大内存吗?
【问题讨论】:
这是一年前写的,所以我假设您使用的是 v1.x.x 包中的 Microsoft.Extensions.Caching.Memory。
由于MemoryCacheOptions 中没有SizeLimit 属性,如v2.x.x,因此在深入研究代码一段时间后,我找到了以下文档行。
/// This is called after a Gen2 garbage collection. We assume this means there was memory pressure.
/// Remove at least 10% of the total entries (or estimated memory?).
因此,包将占用操作系统允许您的代码拥有的内存。当它达到该限制时,它将开始压缩(驱逐)缓存条目。
使用v2.x.x,您可以使用SizeLimit 属性手动设置限制,甚至可以设置达到限制时的压缩量CompactionPercentage。
【讨论】: