2011-10-28 7 views
8

Me encontré en un CacheItem que no se limpió correctamente. Mientras mira a MSDN y corregir a mí mismo en el uso de cálculo basada en UTC, encontré esta información confusa:¿Cómo funcionan el almacenamiento en caché 'Prioridad' y 'AbsoluteExpiration'?

AbsolutExpiration se utiliza para establecer un "keep-alive" de una CacheItem, Priority.NotRemovable se usa para forzar CacheItem a existir para siempre. No hay notificación sobre qué propiedad prevalece sobre la otra.

El código siguiente compila y el Analizador de SQL también confirma que la base de datos se consulta solo una vez, mientras que todas las demás solicitudes provienen de la memoria caché.

CacheItemPolicy _cachePolicy = new CacheItemPolicy() 
{ 
    AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)), 
    Priority = CacheItemPriority.NotRemovable 
}; 

que suponer que esta fuerza código de los elementos de la caché para quedarse para siempre, pero se borran después de 12 horas a partir de la creación, de acuerdo con la nota del MSDN acerca de la configuración.

"implementaciones de caché debe establecer la prioridad NotRemovable para una entrada caché sólo si la aplicación de caché proporciona formas para desalojar entradas de la memoria caché y para gestionar el número de entradas de caché"

A continuación, el Por otro lado, ¿por qué ambas propiedades funcionarían juntas? ¿La implementación trae algún tipo de "más no extraíble"?

+0

Me lo estaba preguntando gracias a la documentación poco clara. En mi caso, me gustaría que la entrada almacenada en la memoria caché no se elimine a menos que caduque para evitar que la memoria caché la limpie con mucha carga antes de que caduque. –

Respuesta

5

De acuerdo con this "NotRemovable" impide que la entrada de la memoria caché se elimine automáticamente (como cuando la memoria caché se está quedando sin espacio) pero se eliminará cuando caduque o la saque manualmente de la memoria caché.

NotRemovable Los elementos de caché con este nivel de prioridad no se eliminarán automáticamente de la memoria caché que el servidor libera la memoria del sistema. Sin embargo, los artículos con este nivel de prioridad se eliminan junto con otros artículos de acuerdo con el tiempo de expiración absoluto o móvil del artículo.

+0

Su respuesta se refiere a 'System.Web.Caching.CacheItemPriority', no' System.Runtime.Caching.CacheItemPriority', que se formula en la pregunta. Edite o elimine su respuesta; esto es muy engañoso. (Estaba viendo MSDN cuando encontré tu respuesta, esa es la única razón por la que me di cuenta). – xxbbcc

Cuestiones relacionadas