【问题标题】:What's the difference between the HttpRuntime Cache and the HttpContext Cache?HttpRuntime Cache 和 HttpContext Cache 有什么区别?
【发布时间】:2010-11-09 16:30:57
【问题描述】:
【问题讨论】:
标签:
asp.net
caching
httpcontext
httpruntime.cache
【解决方案1】:
最后确实是同一个缓存,只是 HttpContext.Current 有时可以为空(当不在 web 上下文中,或者在 web 上下文中但尚未构造时)。始终使用HttpRuntime.Cache 是安全的。
【解决方案2】:
当您在常规网页中时,可以安全地使用 HttpContext.Cache 或仅使用页面的 Cache 属性。
如果您正在执行不在页面中的操作,您通常需要使用 HttpRuntime.Cache 来安全地访问它。
在某些情况下,您可以知道是否存在 http 上下文,例如,如果您从网页启动单独的线程,则该线程没有 http 上下文。在其他情况下,有时您可能会有一个 http 上下文,例如在 global.asax 中的 Application_Start 方法中,因为应用程序可能并不总是因为有请求而启动。
【解决方案3】:
虽然我们都知道它只是在内部返回 HttpRuntime.Cache,但我也发现它具有误导性。此外,我猜 HttpRuntime 是公开缓存的一个糟糕选择。
每个人都说Session 是会话级缓存,而我们所说的缓存是应用程序级的。我更喜欢Application.Cache 作为我们今天使用的缓存,HttpContext.Cache 指代所谓的HttpContext.Items。
至于回答你的问题,我认为我们都应该坚持使用 HttpRuntime.Cache 以使我们的代码更清晰,即使我们确实有各种方法可以访问它。当您认真计划使用它时,您最好封装自己的 API 并在内部调用 HttpRuntime's 或任何其他缓存实现(EntLib、Velocity 等...)。