2012-02-24 12 views
7

Antecedentes: estoy escribiendo la aplicación web ASP.NET MVC 3. Tengo un List<MyObject> (en realidad varias listas) de objetos que quiero guardar en caché debido a la práctica función de caducidad automática y la seguridad de las hebras.Does System.Web.Caching.Cache ¿Eliminar los objetos purgados de la memoria caché?

Cada uno de esos objetos contiene internamente la instancia de System.Threading.Semaphore que se utiliza para la implementación interna del servidor push.

Así que me pregunto cómo voy a cambiar el ciclo de vida de mis objetos si los pongo en el caché? ¿Puede esto crear problemas con threading/NullReferenceExceptions si la memoria caché realmente elimina los objetos que purga/etc.? Tal vez algunas otras razones obvias para no hacer esto?

TIA.

Respuesta

9

La memoria caché no elimina explícitamente los objetos cuando se expulsan de la memoria caché por algún motivo. Se podría demostrar esto probando, pero si este fuera el caso, sería en la documentación, y no es:

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

El ciclo de vida de los objetos en la memoria caché puede ser extendido por estar en la memoria caché, ya que la memoria caché mantiene una referencia a ellos. Si desea evitar esto, puede almacenar en caché una referencia débil.

http://msdn.microsoft.com/en-us/library/system.weakreference.aspx

Si hace esto no debe haber consecuencias del ciclo de vida de almacenamiento de la referencia en la memoria caché.

Una cosa en qué pensar: dices que quieres usar el caché porque es seguro para subprocesos. Debe tener en cuenta que el objeto de caché en sí mismo es seguro para la ejecución de subprocesos, pero si almacena en caché un objeto no seguro para subprocesos en la memoria caché que no hará que el objeto en caché se enrute de forma automática. Específicamente List<T> no es seguro para subprocesos y almacenarlo en la caché no cambiará esto. Use las colecciones concurrentes si desea garantizar la seguridad de las secuencias.

+0

¡Gracias por la respuesta! Ahora me siento un poco más cómodo. No me importa extender el ciclo de vida, esto incluso puede agregar puntos para esta solución para mí. Si no aparecerán más respuestas en el futuro cercano, aceptaré su respuesta. –

+3

Debe tenerse en cuenta que puede hacer que los objetos se eliminen si es necesario especificando un método de devolución de llamada de eliminación. – Rozwel

+0

@Rozwel: Gracias, entiendo eso. Solo quería asegurar lo opuesto: que los objetos no se eliminarán automáticamente. –

Cuestiones relacionadas