¿Cuál es la diferencia entre el caché HttpRuntime y la caché HttpContext?
-
12-09-2019 - |
Pregunta
Sé que es una pregunta muy similar aquí pero yo tenía la esperanza de obtener una mejor explination. Por qué iba a utilizar nunca HttpContext.Cache en lugar de HttpRuntime.Cache si el HttpContext utiliza realmente el HttpRuntime.Cache detrás de las escenas?
En el artículo Simular un servicio de Windows usando ASP.NET para ejecutar los trabajos programados Omar utiliza el HttpContext para almacenar sus elementos de caché, pero cuando Jeff Atwood puesto en práctica aquí optó por utilizar el HttpRuntime lugar. Obviamente en esta situación particular que tiene sentido desde ya que no tiene que hacer una petición web para añadir el elemento de la caché de nuevo en el HttpContext.
Sin embargo, yo estoy buscando unos puntos básicos en cuanto a cuándo utilizar uno contra el otro.
Solución
Realmente es el mismo caché al final, sólo HttpContext.Current
veces puede ser nula (cuando no en un contexto web, o en un contexto web, pero aún no construido). Usted sería seguro de usar siempre HttpRuntime.Cache
.
Otros consejos
Cuando estás en una página web normal, se puede utilizar con seguridad HttpContext.Cache
o simplemente la propiedad Cache
de la página.
Si usted está haciendo algo que no está en una página, a menudo es necesario utilizar HttpRuntime.Cache
para obtener de forma segura el acceso a la misma.
En algunos casos se puede saber si hay un contexto http o no, por ejemplo si se inicia un hilo separado desde una página web, que el hilo no tiene contexto http. En otros casos puede que tenga un contexto http veces, como en el método Application_Start
en global.asax
, ya que la aplicación no siempre se puede iniciar porque hay una solicitud.
Me resulta engañosa también, aunque todos sabemos que sólo devuelve HttpRuntime.Cache
internamente. También el tipo de HttpRuntime es una mala elección para exponer la caché supongo.
Todo el mundo sais cómo es Session
caché de nivel de sesión y la caché que estamos hablando es de aplicación a nivel. Yo preferiría haber Application.Cache
como el caché que estamos utilizando hoy y HttpContext.Cache
para referirse a lo que se conoce como HttpContext.Items
.
En cuanto a responder a su pregunta, creo que todos debemos ceñirnos a la HttpRuntime.Cache hacer nuestro código más claro aún si tenemos diferentes maneras de acceder a él. Y cuando realmente el plan de utilizarlo es mejor que envolver su propia API y tienen que internamente llama a la HttpRuntime's
o cualquier otra aplicación de caché (EntLib, velocidad, etc ...).