我第一次真正开始使用.NET进行缓存,所以想要运行几个场景。
问题1:许多昂贵的物品 我有一些小对象(简单的int /字符串属性)实例化非常昂贵。这些是用户统计对象,每个用户可以有1到10个。用这些人填满缓存是好还是坏?
问题2:几乎没有经常使用的廉价物品 还有一些对象(同样很小)在每次页面加载时多次使用。缓存是否经常被访问?
Fanks!
stackoverflow:破解问题建议工具btw。
答案 0 :(得分:1)
1)我会缓存它们。如果您担心缓存“填满”
,您可以随时设置CacheItemPriority.Low
2)是的,缓存旨在定期访问。它可以带来巨大的性能提升。
答案 1 :(得分:1)
如果可以的话,你的两个问题的答案都是积极地缓存它们。
在整个应用程序的生命周期中实例化但相对静态(即不变)的对象应该被缓存。如果您可以通过这样做来提高性能,则应该缓存相对便宜的对象。
当您需要在任何这些对象变得陈旧或过时时使缓存失效时,您可能会遇到问题。缓存失效可能是一个难题,尤其是在多服务器环境中。
答案 2 :(得分:1)
我认为过于频繁地点击缓存没有任何问题......
整体而言,asp.net缓存在决定保留什么以及通常管理空间方面是相当聪明的。作为一项规则,虽然我不依赖于缓存来存储信息,但只能将其用作命中磁盘或数据库的替代方法。会话状态可以更好地服务于用户对象。
http://aspnet.4guysfromrolla.com/articles/100902-1.aspx 是一篇很棒的文章,解释了.net缓存的内置功能。
答案 3 :(得分:1)
让我们在你的标题中解决问题 - 当缓存太多时。
如果你在缓存中投入太多东西以致它正在推动其他东西,那就太多了。如果服务器上的网站总共使用的内存多于物理内存,则它们会互相推送到存储在磁盘上的虚拟内存中。这实际上意味着你要缓存磁盘上的一些对象而不是内存,这要慢得多。
如果你在缓存中放置这么多对象并将它们互相推出,这太过分了,所以你很少在它们消失之前使用缓存中的任何对象。
所以,通常你可以在达到限制之前缓存很多,在缓存中没有任何意义。
在确定最适合缓存的内容时,请考虑瓶颈的位置。例如,如果您的数据库服务器的容量比Web服务器大得多,则缓存数据库结果不会节省太多资源。从数据库获取数据需要时间,但在等待它时不会在Web服务器上使用太多资源,因此它不会对吞吐量产生太大影响。