我在ASP.NET中使用MemoryCache
,并且运行良好。我有一个对象缓存了一个小时,以防止从存储库中重新提取数据。
我可以看到缓存在调试中起作用,但是在第一次调用和对象被缓存之后,缓存也已经部署到服务器,后续的调用大约是时间的1/5。
但是我注意到,每个新的客户端调用(仍然在1小时窗口内-实际上只是一分钟或2分钟后)似乎都对我的服务(即进行缓存)进行了第一次调用,其调用时间几乎与原始调用一样长在数据被缓存之前调用。
这让我开始怀疑-是MemoryCache
session 特定的,并且每个进行调用的新客户端都在存储它自己的缓存,或者即使我知道数据已被缓存,还有其他事情导致第一个调用花费这么长时间吗?
最佳答案
从MSDN:
阅读并在反射代码中进行一些研究,很明显MemoryCache
只是一个简单的类。您可以使用MemoryCache.Default
属性来(重新)使用同一实例,也可以根据需要构造任意数量的实例(尽管推荐的实例尽可能少)。
因此,基本上答案就在您的代码中。
如果使用MemoryCache.Default
,则只要应用程序池存在,高速缓存就会保留。 (仅提醒您,默认的应用程序池空闲超时为20分钟,不到1小时。)
如果使用new MemoryCache(string, NameValueCollection)
创建它,那么上面提到的注意事项将加上您在其中创建实例的上下文,也就是说,如果您在 Controller 内部创建实例(我希望不是这种情况),那么您的缓存可以保留一个请求
很遗憾,我找不到任何引用,但是... MemoryCache
不能保证根据您指定的缓存策略保存数据。特别是,如果您正在运行应用程序的计算机在内存上压力很大,则您的缓存可能会被丢弃。
如果仍然没有运气找出早期缓存项失效的原因是什么,则可以利用 RemoveCallback
来调查项失效的原因是什么。
关于asp.net - 是MemoryCache作用域 session 或应用程序范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16678927/