【问题标题】:I'm losing all my cache.... (Items are disapearing from my cache)我正在丢失我所有的缓存......(项目正在从我的缓存中消失)
【发布时间】:2023-03-09 06:29:02
【问题描述】:

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

我正在缓存有意义的东西...使用高/正常/低优先级添加东西.. 告诉他们分别在缓存中停留 2 周、1 周、4 小时

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

有时,如果我快速浏览该站点,缓存中的项目数量最多可以达到 2000 项……但如果我等待 5 分钟并刷新页面,缓存会减少到 20 项……(只是缓存的内容)在那个页面上)

有什么方法可以找到我们的情况吗?有没有我失踪的原因?

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

我有 4 gigs 的内存,为什么我的缓存要完全清空?

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

编辑:我正在使用滑动到期

编辑:我把它整理出来,有一两个非常大的项目,它们被设置为高优先级..以及其他一些较小的更改解决了我的问题。

【问题讨论】:

    标签: .net asp.net caching webforms


    【解决方案1】:

    如果应用程序池设置为每 xx 分钟回收一次,您告诉它在缓存中停留多长时间都没有关系。在大多数服务器上,应用程序池默认每 1440 分钟(24 小时)回收一次。除非您持久保存数据,否则您的缓存无法在应用程序池回收中继续存在。

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

    您还可能使用了超出应用程序池配置允许的 RAM、过多的 CPU 等。

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

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

    【讨论】:

      【解决方案2】:

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

      跟踪这种情况的方法是使用缓存过期回调函数来记录内容。它应该能够让您了解被丢弃的内容以及被丢弃的时间以及原因。

      【讨论】:

        【解决方案3】:

        很可能您的app pool workers are recycling(空闲或其他),因此启动时缓存为空。

        【讨论】:

          【解决方案4】:

          您是否设置了绝对或滑动到期时间?

          【讨论】:

            猜你喜欢
            • 2010-12-12
            • 1970-01-01
            • 2022-11-23
            • 2012-03-06
            • 2014-01-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多