2011-08-03 14 views
8

¿Cuáles son los principales pros y contra por usar HttpRuntime Cache contra el uso de campo estático simple?HttpRuntime Caché vs. static dictionary/fields

Necesito almacenar datos en el ámbito de toda la aplicación ASP.NET.

HttpRuntime.Cache["MyData"] = someHashtable; 

vs

private static System.Collections.Hashtable _myData; 
public static System.Collections.Hashtable MyData 
{ 
    get 
    { 
     if (_myData == null) 
     { 
      _myData = new System.Collections.Hashtable(); 
      // TODO: Load data 
     } 
     return _myData; 
    } 
} 

Respuesta

5

objetos en HttpRuntime.Cache tienen períodos de vencimiento a menos desconocidos establecer explícitamente (lo que significa que los objetos pueden caducar en cualquier momento), mientras que los objetos dentro de su HashTable viven como su grupo de aplicaciones está vivo (a menos que quite manualmente una entrada). El HttpRuntime.Cache también le permite establecer varias otras características, como la prioridad (opcional) del elemento de caché y el tiempo de caducidad.

+1

Lo que más me preocupó cuando uso 'HttpRuntime.Cache' son los conflictos de las claves, cuando tiene una aplicación de gran empresa con mayor cantidad de datos en caché. Pero como yo lo veo, 'HttpRuntime.Cache' tiene una característica más brillante además de la prioridad y el tiempo de caducidad. ** CacheDependencies **. Entonces, incluso cuando quiero tener datos en caché que nunca caducan, con el tiempo cambiarán y este cambio puede ser manejado por las dependencias de la memoria caché (con suerte). –

0

con la caché puede configurar fácilmente un enddate a la validez; el objeto caché vence el contenido automáticamente.

también la memoria caché se puede dar una prioridad, que los elementos menos importantes se pueden dar de baja prioridad por lo que cuando el servidor recibe alta carga, ese elemento se elimina primero

con cahce sin embargo usted Allways tiene que hacer algo extra esfuerzo en la prueba unitaria porque el httpcontext no está disponible durante las pruebas unitarias.

+0

'HttpContext' me da dolor de cabeza. Afortunadamente, este no es el caso. 'HttpRuntime.Cache' es accesible incluso en pruebas unitarias. Pero no tiene que ser totalmente funcional ya que [aquí] (http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx) dicen que no deben usarlo fuera de ASP Aplicaciones .NET –

0

HttpRuntime.Cache le permite especificar la devolución de llamada de expiración, pero con el diccionario estático tendrá que esperar una consulta para ejecutar su ciclo de caducidad de los elementos de su caché.

Cuestiones relacionadas