ASP.NET对象缓存 - 多少钱太多了?

时间:2009-08-07 16:35:52

标签: asp.net oop caching

我第一次真正开始使用.NET进行缓存,所以想要运行几个场景。

问题1:许多昂贵的物品 我有一些小对象(简单的int /字符串属性)实例化非常昂贵。这些是用户统计对象,每个用户可以有1到10个。用这些人填满缓存是好还是坏?

问题2:几乎没有经常使用的廉价物品 还有一些对象(同样很小)在每次页面加载时多次使用。缓存是否经常被访问?

Fanks!

stackoverflow:破解问题建议工具btw。

4 个答案:

答案 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服务器上使用太多资源,因此它不会对吞吐量产生太大影响。