【发布时间】:2014-12-08 13:14:41
【问题描述】:
我正在使用 .NET 的 MemoryCache 类在我的应用程序中缓存数据。在大多数应用程序的用例中,绝对和/或滑动过期缓存策略对我的应用程序非常有用。但是,在某些时间段,应用程序可能会启动一个长时间运行的进程,该进程不会更新任何应用程序数据。该过程通常很长,以至于缓存将过期并在此过程中清除缓存的数据,这是我真正希望数据保留在缓存中的时候。有什么方法可以暂时暂停 MemoryCache 的过期和/或清除?
我可以扔掉我所有的物品并逐个更改过期政策,但我担心缓存中有数十万甚至数百万的物品,那不会从性能的角度工作。
一种想法是将项目放回 CacheEntryRemovedCallback 中的缓存中,但这似乎是在与系统作斗争而不是使用它,并且不是线程安全的。
任何想法都将不胜感激。
【问题讨论】:
-
这确实有点宽泛。如果没有一些特定的代码,只能提供关于使用缓存的非常广泛的建议;例如,不要试图“强迫”它去持有这样的东西,如果你有这么多的东西,考虑一个不同的策略。
-
您会建议什么替代策略?正如我所说,MemoryCache 非常擅长保存我需要的大量项目,并且在我 95% 的用例中都非常有效。
-
好吧,你可能已经把它推到了极限。这是一个缓存;不是持久的内存存储。您确实需要基于某些特定代码的更集中的问题。在这方面真的不可能给你有用的一般性建议。
-
我的问题是,MemoryCache 或其他替代 .Net 缓存能否处理我的用例?我不想要一个持久的内存存储:这会很快导致我的应用程序内存不足——我想要一个基于某些策略驱逐的缓存。我只是希望我的策略根据应用程序所处的“模式”更加动态......
标签: c# .net memorycache