当我需要在我的应用程序中缓存某些内容时,我曾经选择 Web.Caching.Cache。但是我遇到了一些使用 HttpApplicationState 的遗留代码。
由于 Web.Caching.Cache 更强大、更灵活(似乎更多),有没有更好使用 HttpApplicationState 的情况?
如果你能给我看一些例子,我将不胜感激:-)
两者均可用于存储可在整个 ASP.Net 应用程序中全局访问的信息HttpApplicationState
。Web.Caching.Cache
但是,它们有非常不同的用途。
HttpApplicationState
用于存储通常不会更改的应用程序数据。它通常在应用程序启动时填充Application_Start
到Global.asax中。我个人并没有太多使用它,但我相信它通常用于存储对应用程序的所有用户都是全局的小块应用程序配置,这些配置要么不会更改,要么很少更改。进入应用程序状态的东西将无限期地保留在那里,直到应用程序回收。但是当它再次回收并重新启动时,Application_Start
将再次执行并重新填充它。
重要的是要注意这HttpApplicationState
是一个单例并且不是线程安全的。因此,当您对其进行更改时,您必须通过调用 和 来锁定和解锁 ApplicationApplication.Lock()
对象Application.UnLock()
。阅读更多
实际上,您可以通过三种不同的方式缓存 ASP.Net 内容:页面级、部分页面和数据。我将谈论数据缓存,因为我认为这与您的问题最相关。ASP.Net 缓存用于存储大量应用程序数据,每次请求从数据存储中检索这些数据的成本很高。和 Cache之间的主要区别HttpApplicationState
是 1) 缓存数据旨在通过各种触发器或条件(时间、其他缓存依赖项等)过期并从内存中清除,而HttpApplicationState
在应用程序回收之前将永远存在,以及 2)如果服务器遇到严重的内存压力,可以从内存中清除缓存数据,因此您永远不能指望它存在,必须始终测试它是否存在,而HttpApplicationState
它将始终存在。
缓存用于将数据存储在更靠近应用程序的位置,不需要在每次请求时从数据库中提取数据。缓存旨在存储大量数据,智能缓存架构可以对性能产生巨大的积极影响。