【问题标题】:Why should I only create MemoryCache early in the application lifecycle?为什么我应该只在应用程序生命周期的早期创建 MemoryCache?
【发布时间】:2015-01-03 11:24:08
【问题描述】:

根据 MSDN 文档here

除非需要,否则不要创建 MemoryCache 实例。如果你 在客户端和 Web 应用程序中创建缓存实例 MemoryCache 应在应用程序生命周期的早期创建实例。你 必须只创建将用于的缓存实例数量 您的应用程序,并将对缓存实例的引用存储在 可以全局访问的变量。例如,在 ASP.NET 应用程序,您可以将引用存储在应用程序状态中。如果 您在应用程序中只创建一个缓存实例,使用 默认缓存并从 Default 属性中获取对它的引用 你需要访问缓存。

它并没有完全解释这背后的原因,还有其他几个关于清除MemoryCache 的问题,但似乎还没有得出一个可靠的结论。正如我所收集的,我的选择是处置MemoryCache 并创建一个新实例,根据上述文档不建议这样做,或者使用枚举器,由于性能问题也不建议这样做。 Trim() 已被证明是不可靠的,所以我正在调查为什么在我的应用程序生命周期中间实例化 MemoryCache 被认为是一个坏主意。

为了深入了解我为什么好奇,这里的主要问题是我希望我的MemoryCache 仅适用于一系列方法调用的范围。这些方法调用是跨同一对象的不同实例进行的,它们共享通过数据库检索到的数据,尽管不太可能,但可能会在我分配给到期窗口的几秒钟内发生变化。我的想法是每当我开始一系列方法调用时创建一个新的MemoryCache 实例,以确保我拥有最新的数据,同时不会为每个实例多次访问数据库。但是,MSDN 也建议不要创建新实例,并建议将所有实例都放在全局变量中。

简而言之,为什么建议在应用程序生命周期开始时实例化MemoryCache,为什么我要对我使用的MemoryCaches 进行全局引用? p>

【问题讨论】:

    标签: c# .net caching memorycache


    【解决方案1】:

    因为它需要连续的内存。您想在内存碎片化之前执行此操作。

    我不知道全局。

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2011-09-25
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多