Pregunta

Estaba trabajando en la documentación de un proyecto de código abierto que creé hace un tiempo llamado Ayudante de caché web.Es una abstracción además de la funcionalidad de caché existente en System.Web.Caching.

Tengo problemas para encontrar los detalles del algoritmo utilizado para purgar el caché cuando el servidor se queda sin memoria.

Encontré este texto en MSDN:

Cuando el servidor web que aloja una aplicación ASP.NET se ejecuta bajo en la memoria, el objeto de caché purga selectivamente elementos para liberar memoria del sistema.Cuando se agrega un elemento al caché, puede asignarle una prioridad relativa en comparación con los otros elementos almacenados en el caché.Artículos a los que se refiere asignar valores de prioridad más altos tienen menos probabilidades de ser eliminados de la caché cuando el servidor está procesando un gran número de solicitudes, mientras que los elementos a los que se asignan valores de prioridad más bajos son más susceptibles de ser eliminados.

Esto todavía es un poco vago para mi gusto.Quiero saber qué otros factores se utilizan para determinar cuándo purgar un objeto almacenado en caché.¿Es una combinación de la última hora de acceso y la prioridad?

¿Fue útil?

Solución

Echemos un vistazo al código fuente.La purga comienza desde TrimIfNecessary() método en CacheSingle clase.En primer lugar, intenta eliminar todos los elementos caducados en FlushExpiredItems() método de CacheExpires clase.Si eso no es suficiente, comienza a iterar a través de "depósitos" en CacheUsage.FlushUnderUsedItems().Datos/estadísticas de uso de caché divididos en "depósitos" según CacheItemPriority y sus estadísticas/LRU se tratan por separado en cada depósito.Hay dos iteraciones a través de depósitos.La primera iteración elimina solo los elementos recién agregados (durante los últimos 10 segundos).El segundo elimina otros elementos.Comienza a eliminar elementos de CacheItemPriority.Low cubo y sus elementos LRU.Se detiene cuando se elimina lo suficiente; de ​​lo contrario, continúa con los siguientes elementos LRU y depósitos de mayor prioridad.no toca CacheItemPriority.NotRemovable elementos, ya que no los agrega a los depósitos de uso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top