C# HttpContext.Current.Cache与HttpRuntime.Cache

C# HttpContext.Current.Cache与HttpRuntime.Cache,c#,asp.net-mvc,caching,C#,Asp.net Mvc,Caching,我一直在读一些关于c#3.5中缓存的内容。我有点困惑,希望您能解释一下两者之间的区别 HttpContext.Current.CachevsHttpRuntime.CachevsSystem.Web.Caching.Cache 此外,我已经阅读了在非web应用程序中使用上述任何一种方法,这是不推荐的,但它是有效的。缺点是什么?System.Web.Caching.Cache是为Web应用程序实现缓存的类型HttpContext.Current.Cache只是一个包装器,返回HttpRuntime

我一直在读一些关于c#3.5中缓存的内容。我有点困惑,希望您能解释一下两者之间的区别

HttpContext.Current.Cache
vs
HttpRuntime.Cache
vs
System.Web.Caching.Cache


此外,我已经阅读了在非web应用程序中使用上述任何一种方法,这是不推荐的,但它是有效的。缺点是什么?

System.Web.Caching.Cache
是为Web应用程序实现缓存的类型
HttpContext.Current.Cache
只是一个包装器,返回
HttpRuntime.Cache
,它只是
System.Web.Caching.Cache
的实例

更新

关于第二部分,请参阅

更新:为什么需要包装HttpRuntime.Cache?

在我个人看来,
HttpContext
是传递给
IHttpHandler.ProcessPostBack
的类型,而
HttpApplication
公开了传递给
IHttpModule.Init
HttpContext
。这将确保使用方法注入注入所有依赖项。因此,他们引入了一定程度的间接性


处理程序和模块应该不知道承载它们的HttpRuntime。当您在ASP.NET页面中时,建议使用
this.page.Cache
而不是
HttpContext.Current.Cache
HttpRuntime.Cache
作为使用HttpContext的工具。Current将涉及解析当前线程的开销,而
HttpRuntime.Cache
将创建外部依赖项
Page.Cache
是用
HttpContext.Cache
初始化的,它被传递到
ProcessRequest

为什么
HttpRuntime.Cache
需要包装?