2012-04-25 28 views
5

He estado leyendo un poco sobre el almacenamiento en caché en C# 3.5. Un poco confundido y agradecería una aclaración en la elaboración de lo que es la diferencia entreHttpContext.Current.Cache vs. HttpRuntime.Cache

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

Además, he leído el uso de cualquiera de los anteriores, en aplicación no web no se recomienda, pero funciona. ¿Cuáles son los inconvenientes?

Respuesta

11

System.Web.Caching.Cache es el tipo que implementa la memoria caché para una aplicación web. HttpContext.Current.Cache es solo un contenedor y devuelve HttpRuntime.Cache que no es más que una instancia de System.Web.Caching.Cache.

actualización

Consulte Is it OK to use HttpRuntime.Cache outside ASP.NET applications? para su segunda parte.

Actualización: ¿Por qué HttpRuntime.Cache necesita ser envuelto?

En mi opinión personal, HttpContext es del tipo que se pasa a IHttpHandler.ProcessPostBack y HttpApplication expone HttpContext que se pasa IHttpModule.Init. Esto aseguraría que todas las dependencias sean inyectadas usando la inyección de Método. Por lo tanto, introdujeron un nivel de indirección.

Los manipuladores y módulos no deben tener en cuenta el HttpRuntime en el que están alojados. Mientras se encuentre en una página ASP.NET, es recomendable usar this.Page.Cache en su lugar HttpContext.Current.Cache o HttpRuntime.Cache, ya que usar HttpContext.Current implicaría una sobrecarga para resolver el hilo actual y HttpRuntime.Cache crearía una dependencia externa. Page.Cache se inicializa con HttpContext.Cache que se pasa a ProcessRequest

+1

¿Por qué 'HttpRuntime.Cache' necesita ser envuelto? –

+0

Actualizado mi respuesta – Ramesh

Cuestiones relacionadas