Asp.net Core 中的内存使用限制

Posted

技术标签:

【中文标题】Asp.net Core 中的内存使用限制【英文标题】:Limitation of memory usage in Asp.net Core 【发布时间】:2016-12-19 15:18:48 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

由于MemoryCacheOptions 中没有SizeLimit 属性,如v2.x.x,因此在深入研究代码一段时间后,我找到了以下文档行。

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

因此,包将占用操作系统允许您的代码拥有的内存。当它达到该限制时,它将开始压缩(驱逐)缓存条目。

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

【讨论】:

SizeLimit 是指大小(以字节为单位)吗? 另外,SizeLimit 没有单位。设置缓存条目时需要设置大小。

以上是关于Asp.net Core 中的内存使用限制的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Core:在控制器外使用内存缓存

Asp.Net core api 中没有释放内存

为啥在 Asp.Net Core 中使用 Steeltoe.Discovery.Client 库会不断增加内存?

ASP.NET Core 6框架揭秘实例演示[16]:内存缓存与分布式缓存的使用

《ASP.NET Core 6框架揭秘》实例演示[16]:内存缓存与分布式缓存的使用

ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存