gpt4 book ai didi

c# - MemoryCache - 防止项目过期

转载 作者:太空狗 更新时间:2023-10-30 01:00:19 27 4
gpt4 key购买 nike

在我的应用程序中,我使用 MemoryCache,但我不希望项目过期。因此,项目将使用默认策略插入到缓存中,而无需设置 AbsoulteExpirationSlidingExpiration

最近,在最后一次高速服务器上,我遇到了缓存问题,因为它返回空值代替之前插入到缓存中的所需值。事实证明,不仅有资格过期的项目(因为那些明确设置了过期日期的项目)会从缓存中删除。在内存压力下,当超过 CacheMemoryLimit 和/或 PhysicalMemoryLimit 的值时,MemoryCache 也会删除其他元素。

如何预防?如何确定,一旦元素被设置到缓存中,它就可以安全地再次从中获取?

我考虑过将 PollingInterval 设置为某个巨大的值,但这只会延迟潜在的问题(轮询间隔在文档中被引用为最大时间,而不是确切或最小时间)。将 PhysicalMemoryLimitPercentage 设置为 100% 也不能解决问题,因为它引用的是物理安装的内存,而不是整个可用的虚拟内存。还是我错了,它确实有帮助?

最佳答案

CacheItemPolicy 有一个 Priority可以设置为 NotRemovable 的属性。

不过,您确实需要了解使用此设置向缓存中添加了多少数据。不断向缓存中添加数据并且从不删除它最终会导致内存或溢出问题。

缓存通常用于缓存中不再存在的项目可接受的情况,在这种情况下,将从持久存储(例如数据库或文件)中再次检索值。

在您的情况下,听起来您的代码需要该项目存在,这可能建议寻找另一种方法(例如,评论中提到的静态 ConcurrentDictionary)。

关于c# - MemoryCache - 防止项目过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47515538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com