Asp.net 核心中的内存使用限制

Limitation of memory usage in Asp.net Core

我在我的项目中使用 IMemoryCache。我想知道如果我的应用程序将许多长期存在的对象推送到缓存中会发生什么。它可以占用所有可用内存吗?我可以全局定义应用程序的最大内存吗?

这是一年前写的,所以我假设您使用的是 Microsoft.Extensions.Caching.Memory 包的 v1.x.x

因为 MemoryCacheOptions 中没有像 v2.x.x 这样的 SizeLimit 属性,在深入研究代码一段时间后,我发现了以下行文档。

https://github.com/aspnet/Caching/blob/rel/1.1.2/src/Microsoft.Extensions.Caching.Memory/MemoryCache.cs#L329

/// 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?).

因此,包将占用与 OS 允许您的代码拥有的内存一样多的内存。当它达到该限制时,它将开始压缩(逐出)缓存条目。

使用v2.x.x,您可以使用SizeLimit 属性手动设置限制,甚至可以设置达到限制时的压缩量CompactionPercentage