我正在将 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/