何时使用HttpApplicationState而不是Web.Caching.Cache?

时间:2012-05-25 02:24:10

标签: asp.net caching

当我需要在我的应用程序中缓存一些东西时,我习惯选择Web.Caching.Cache。但我遇到了一些使用HttpApplicationState的遗留代码。

由于Web.Caching.Cache更强大,更灵活(似乎更多),是否有更好的使用HttpApplicationState的情况?

如果你能告诉我一些例子,我将非常感激: - )

1 个答案:

答案 0 :(得分:13)

HttpApplicationState和Web.Caching.Cache都可用于存储可在整个ASP.Net应用程序中进行全局访问的信息。但是,它们的用途非常不同。

HttpApplicationState用于存储通常不会更改的应用程序数据。当应用程序启动时,它通常在global.asax中的Application_Start中填充。我个人并没有太多使用它,但我相信它通常用于存储应用程序配置的小部分,这些应用程序配置对应用程序的所有用户都是全局的,并且不会很少更改或更改。进入应用程序状态的东西将无限期地保留在那里,直到应用程序回收。但是当它再循环并再次重新启动时,Application_State将再次执行并重新填充它。

重要的是要注意应用程序状态是单例并且不是线程安全的。因此,当您对其进行更改时,必须通过调用Application.Lock()和Application.UnLock()来锁定和解锁Application对象。

实际上有三种不同的方法可以缓存ASP.Net内容:页面级别,部分页面和数据。我将讨论数据缓存,因为我认为这与您的问题最相关。 ASP.Net缓存用于存储大量的应用程序数据,这些数据对于每个请求从数据存储中检索都是昂贵的.ApplicationState和Cache之间的关键区别是1)缓存数据被设计为过期并从内存中清除通过各种触发器或条件(时间,其他缓存依赖性等),而ApplicationState将永远存在,直到应用程序回收,2)如果服务器遇到严重的内存压力,可以从内存中清除缓存数据,因此永远不能指望它在那里,必须经常测试它是否存在,而ApplicationState将始终存在。

缓存用于存储距离应用程序更近的数据,不需要在每次请求时从数据库中提取数据。缓存旨在存储大量数据,智能缓存架构可对性能产生巨大的积极影响。