我丢失了所有的缓存....(项目正从我的缓存中消失)

时间:2009-06-09 20:56:35

标签: .net asp.net caching webforms

我目前正在ASP.NET Webforms中开发一个网站..

我正在缓存内容......使用高/正常/低优先级添加内容。 告诉他们留在缓存中2周,1周,4个小时

我在每个页面上显示当前缓存项目的数量(出于调试原因)。

有时如果我快速浏览网站,缓存中的项目数量最多可以达到2000项...但如果我等待5分钟并刷新页面,则缓存会减少到20项......(正如缓存的那样)在该页面上)

有什么方法可以找到我们正在发生的事情吗?这是否有原因让我失踪?

我正在运行Win7,4Gb ram,64位,VS10,.net4,

我有4场演出的ram,为什么我的缓存完全空了?

我会说10%的缓存项目大约是4k,其余的都是大约100个字符长的字符串。

编辑:我正在使用Sliding Expiration

编辑:我把它整理出来了,有一两件物品非常大而且它们被设置为高优先级..而且其他一些较小的修改也解决了我的问题。

4 个答案:

答案 0 :(得分:9)

如果将应用程序池设置为每隔xx分钟回收一次,那么告诉它保留在缓存中的时间长短并不重要。在大多数服务器上,应用程序池默认每1440分钟(24小时)回收一次。除非您保留数据,否则您的缓存无法在应用程序池回收中存活。

我坚持不久(几乎从未真正实用)。我还设置了应用程序,如果缓存已被清除以重建自己,因为它需要数据 - 不是一次全部。

您还可以使用比应用程序池配置为允许的CPU更多的RAM,等等。

如果每次重置应用程序或重新加载Visual Studio时都在开发人员计算机上运行,​​那么所有内容也会被删除。

查看您的应用程序池,您可能会看到重置的罪魁祸首。

答案 1 :(得分:6)

仅仅因为系统具有4gb RAM并不意味着ASP.NET进程可以使用所有这些空间,也不意味着ASP.NET缓存可以有效地使用所有这些空间。正如我所理解并观察过它的野兽一样,如果觉得它变得太满,它就会开始自我清醒,这听起来像是在缓存大量的数据。

跟踪此方法的方法是使用缓存过期回调函数来记录内容。它应该能够让你知道什么是倾倒,什么时候,也许是为什么。

答案 2 :(得分:2)

可能是你的app pool workers are recycling(空闲或其他),因此以空缓存启动。

答案 3 :(得分:0)

您是否设置了绝对或滑动过期?