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

5

当我需要在应用程序中缓存某些内容时,我通常选择使用Web.Caching.Cache。但是我遇到了一些使用HttpApplicationState的旧代码。

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

如果你能给我展示一些例子,我将非常感激:-)


我从来不使用ApplicationState。我认为它更适用于遗留代码(旧的ASP时代)。 - TGH
@TGH http://msdn.microsoft.com/en-us/library/system.web.httpapplicationstate.aspx 还在4.0版本中。 - rhapsodyn
是的,我想它仍然存在,但我想不起来我曾经考虑使用它的时候。我猜我能想到的唯一优点就是它永远不会过期... - TGH
1个回答

17

HttpApplicationStateWeb.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则始终存在。

缓存用于存储更接近应用程序的数据,这些数据不需要在每个请求中从数据库中获取。 缓存旨在存储大量数据,智能的缓存架构可以对性能产生巨大的积极影响。


现在我非常确定我可以使用缓存而不是HttpApplicationState,谢谢你。 - rhapsodyn
6
如果你使用的是.NET 4.0或更高版本,你可以在ASP.NET或.NET项目中使用System.Runtime.Caching.MemoryCache。http://msdn.microsoft.com/en-us/library/dd997357.aspx - bounav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接