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

标签 asp.net-core memorycache

我在我的项目中使用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?).

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

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

关于asp.net-core - Asp.net Core 中内存使用的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920847/

相关文章:

c# - asp.net 核心身份来自 BaseApplicationUser 的多个用户

c# - 库中的 AutoMapper 配置文件类 - AutoMapperMappingException : Missing type map configuration or unsupported mapping error

c# - 在 web api 中删除项目单元测试

c# - 在 docker 机器上调试时 MySql 连接被拒绝

c# - 如何使用 MemoryCache 代替 Timer 来触发方法?

caching - LazyCache:定期刷新缓存的项目

asp.net-core - 在 Azure DevOps 管道中设置连接字符串

c# - 当发送者在队列中发送消息时,RabbitMQ Consumer.Received 事件不会在 asp.net Web 应用程序(作为监听器)中触发

c# - 为 MemoryCache(或任何缓存)实现通用 Get<T>

c# - 有没有办法从 IComparer 派生 IEqualityComparer?