加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 是MemoryCache范围会话还是应用程序?

发布时间:2020-12-15 19:28:48 所属栏目:asp.Net 来源:网络整理
导读:我在ASP.NET中使用MemoryCache,它运行良好。我有一个对象被缓存一个小时,以防止新的数据从存储库中拉。 我可以看到缓存在调试中工作,但一旦部署到服务器,在第一次调用和对象被缓存后,后续调用大约1/5的时间。 然而,我注意到每个新的客户端调用(仍然在
我在ASP.NET中使用MemoryCache,它运行良好。我有一个对象被缓存一个小时,以防止新的数据从存储库中拉。

我可以看到缓存在调试中工作,但一旦部署到服务器,在第一次调用和对象被缓存后,后续调用大约1/5的时间。

然而,我注意到每个新的客户端调用(仍然在这个1小时的窗口内 – 实际上只是一分钟或2个)似乎有第一次调用我的服务(这是在缓存)花费的时间几乎与原来在数据被缓存之前调用。

这使我开始怀疑 – 是MemoryCache会话特定的,每个新的客户端进行调用存储自己的缓存,或者是其他的事情,导致第一次调用花费这么长时间,即使我知道数据已缓存吗?

解决方法

从 MSDN:

The main differences between the Cache and MemoryCache classes are
that the MemoryCache class has been changed to make it usable by .NET
Framework applications that are not ASP.NET applications. For example,
the MemoryCache class has no dependencies on the System.Web assembly.
Another difference is that you can create multiple instances of the
MemoryCache class for use in the same application and in the same
AppDomain instance.

阅读和做一些调查反射代码很明显,MemoryCache只是一个简单的类。您可以使用MemoryCache.Default属性(重新)使用相同的实例,或者您可以构建尽可能多的实例(尽管建议尽可能少)。

所以基本上答案在于你的代码。
如果你使用MemoryCache.Default,那么只要你的应用程序池存在,你的缓存就会存活。 (只是提醒你,默认应用程序池空闲超时是20分钟,小于1小时。)

如果你使用新的MemoryCache(字符串,NameValueCollection)创建它,然后上述的注意事项应用加上你创建你的实例的上下文,也就是说,如果你在控制器中创建你的实例(我希望不是这样),然后你的缓存生活一个请求

很遗憾,我找不到任何引用,但… MemoryCache不保证根据您指定的缓存策略保存数据。特别是如果你正在运行你的应用程序的机器上受到内存的压力,你的缓存可能会被丢弃。

如果你还没有运气找出什么是早期缓存项无效的原因,你可以利用RemoveCallback和调查什么是项目失效的原因。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读