c# - 使用 IMemoryCache 每个存储库单例?

标签 c# caching .net-core

我正在将 IMemoryCache 集成到一个项目中,并且我将竭尽全力确保每个存储库或提供程序中的 key 不会发生冲突(即提出一个 key 空间)。但后来我想到,为什么不只为每个存储库/提供者提供他们自己的 IMemoryCache 单例实例——即命名单例。这将保证 key 永远不会冲突,并且一个存储库永远无法访问另一个存储库的内部状态。 my 的原始方面还表示这可能会提高性能,因为现在每个存储库都不会竞争 IMemoryCache 的内部锁。

但我不会假装理解 IMemoryCache 如何管理它的所有逻辑。也许拥有一个应用程序范围的单例实例很重要,这样它就可以以更高效的方式管理缓存条目的生命周期。

基本上,我从未见过有人将每个存储库单例模式与 IMemoryCache 一起使用,因此我正在征求有关此方法的反馈。

谢谢

最佳答案

我相信最初的 .NET Full Framework MemoryCache 旨在通过 MemoryCache.Default 用作单例实例。属性(property)。这是因为它运行在名为 MemoryPressure 的东西上。关于如何实际计算这个神奇的 MemoryPressure 的文档完全为零。毫无疑问,它在多个实例上可能运行得不太巧妙。

看来现在的首选是对缓存设置大小限制。 Dotnet Core 版本中不再存在 MemoryCache.Default 静态属性,并且似乎不存在表明多实例是反模式的警告。此外,似乎 MemoryCacheOptions.CompactOnMemoryPressure 现已弃用,并且首选提供固定大小。我看不出使用多个实例有任何问题。

关于c# - 使用 IMemoryCache 每个存储库单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56874492/

相关文章:

c# - 使用 C# 将字符串列表写入文本文件,添加为邮件的附件

c# - 在 Web 服务中重用/缓存数据表

c# - SignalR 未序列化/反序列化自定义 DataMember 名称

.net-core - 如何为控制台应用程序设置 ElmahCore?

c# - 在不删除空格的情况下按空格拆分字符串?

c# - REST 服务错误响应负载是否应与媒体类型一致

javascript - 如果将关系指定为链接,则防止 ember-data 从服务器重新加载关系

ruby-on-rails - 每个用户的rails缓存

c# - EFCore 连接表和 AutoMapper

c# - 从 GAC 或其他地方浏览/选择程序集