c# asp.net caching .net-4.0

c# - ¿Puedo iterar sobre el.NET4 MemoryCache?



asp.net caching (3)

Estoy usando el caché proporcionado por System.Runtime.Caching.MemoryCache .

Me gustaría enumerar sobre los elementos del caché para poder invalidar (desalojar y luego volver a cargar) los elementos como tales

foreach (var item in MemoryCache.Default) { item.invalidate() }

Pero los documentos oficiales encontrados aquí afirman:

! Importante: la recuperación de un enumerador para una instancia de MemoryCache es una operación de bloqueo y uso intensivo de recursos. Por lo tanto, el enumerador no debe utilizarse en aplicaciones de producción.

¿Seguramente debe haber una manera simple y eficiente de iterar sobre los elementos del caché?


Considere el uso de ChangeMonitors, que le permiten desalojar automáticamente las entradas obsoletas cuando se cumplen ciertas condiciones.

Consulte ¿Hay algún tipo de dependencia de caché en System.Runtime.Caching?

Esto es similar a System.Web.Caching CacheDependencys, que le permite desalojar entradas cuando cambian los archivos u otras entradas de caché.


En 2014,

Esta es la forma correcta de obtener todos los artículos:

Dim AllItems = MemoryCache.Default.Select(Of ItemType)(Function(O) O.Value)

Espero que esto ayude a alguien.


Las sugerencias hechas hasta ahora han sido excelentes, pero mi necesidad sigue siendo la misma: para recorrer los elementos del caché . Parece una tarea tan simple, y espero que la memoria caché interna tenga algún tipo de estructura de lista de todos modos. Los documentos y el conjunto de MemoryCache para MemoryCache .

Entonces, como se mencionó anteriormente, agregué una lista a mi clase de adaptador de caché, que contiene una referencia a cada elemento que coloco en el caché. Si necesito iterar sobre el caché, no solo para la invalidación, sino también para recopilar estadísticas, etc., entonces itero sobre mi lista.

Si la cantidad de elementos colocados en el caché no cambia, entonces esta es una solución razonable. Si el número cambia, entonces necesita insertar / eliminar a través de la clase de adaptador, para mantener la lista sincronizada con el caché real. Desordenado pero funciona, y evita las penalizaciones de rendimiento a las que se alude en los documentos.

Esperemos que el proveedor de memoria caché de MemoryCache en el próximo lanzamiento de la plataforma.