【发布时间】:2010-04-27 20:43:14
【问题描述】:
当使用默认插入方法 Insert(key, value) 并使用 HttpRuntime.Cache 的默认行为添加项目时,何时进行清理?
托管我的应用程序的应用程序池的限制为 0(无限制)...但我看不出有什么办法可以在清理发生之前找出缓存的大小?问题是我正在缓存可能非常大量的数据,但我在服务器上的内存有限,我想避免回收应用程序池。
我在 IIS6 和 IIS7 的上下文中询问。
谢谢。
【问题讨论】:
当使用默认插入方法 Insert(key, value) 并使用 HttpRuntime.Cache 的默认行为添加项目时,何时进行清理?
托管我的应用程序的应用程序池的限制为 0(无限制)...但我看不出有什么办法可以在清理发生之前找出缓存的大小?问题是我正在缓存可能非常大量的数据,但我在服务器上的内存有限,我想避免回收应用程序池。
我在 IIS6 和 IIS7 的上下文中询问。
谢谢。
【问题讨论】:
简短的回答是缓存从Cache.EffectivePrivateBytesLimit开始清除。
默认限制是使用多种因素计算得出的,通常应防止您的流程过度回收。理想情况下,应用程序不会受到回收的影响,但我意识到这并不总是可能的原因有很多。如果需要,您应该能够set memory limits for the cache 配合应用程序池回收设置。
asp.net 团队的 Thomas Marquardt 写信给 a very interesting post explaining the details。
【讨论】: