当我需要在应用程序中缓存某些内容时,我通常选择使用Web.Caching.Cache。但是我遇到了一些使用HttpApplicationState的旧代码。
由于Web.Caching.Cache更强大和灵活(似乎更多),是否有更适合使用HttpApplicationState的情况?
如果你能给我展示一些例子,我将非常感激:-)
当我需要在应用程序中缓存某些内容时,我通常选择使用Web.Caching.Cache。但是我遇到了一些使用HttpApplicationState的旧代码。
由于Web.Caching.Cache更强大和灵活(似乎更多),是否有更适合使用HttpApplicationState的情况?
如果你能给我展示一些例子,我将非常感激:-)
HttpApplicationState
和 Web.Caching.Cache
都可以用于存储在ASP.Net应用程序中可以全局访问的信息,但它们具有非常不同的用途。
HttpApplicationState
用于存储通常不会更改的应用程序数据。通常在应用程序启动时,在 Global.asax 中的 Application_Start
方法中进行填充。我个人很少使用它,但我认为它通常用于存储小的应用程序配置片段,这些片段是全局对所有用户可见的,并且要么不会更改,要么非常不经常更改。放入应用程序状态中的内容将一直保留到应用程序回收之前。但是当它重新启动并再次开始运行时,Application_Start
将再次执行并重新填充其内容。
需要注意的是,HttpApplicationState
是单例且非线程安全的。因此,当您对其进行更改时,必须通过调用 Application.Lock()
和 Application.UnLock()
锁定和解锁 Application 对象。了解更多
实际上,ASP.Net有三种不同的缓存方式:页面级、部分页面和数据。 我将谈论数据缓存,因为我认为它与您的问题最相关。 ASP.Net缓存用于存储大量应用程序数据,每个请求从数据存储库中检索可能很昂贵。 HttpApplicationState
和Cache之间的关键区别是:1)缓存数据被设计为在各种触发器或条件(时间、其他缓存依赖项等)下过期并从内存中清除,而HttpApplicationState
将一直存在,直到应用程序回收;2)如果服务器面临严重的内存压力,缓存数据可以从内存中清除,因此您永远无法保证它是否存在,并且必须始终测试其是否存在,而HttpApplicationState
则始终存在。
缓存用于存储更接近应用程序的数据,这些数据不需要在每个请求中从数据库中获取。 缓存旨在存储大量数据,智能的缓存架构可以对性能产生巨大的积极影响。