Estoy implementando un caché en una biblioteca de clases que estoy usando en una aplicación asp.net.Implementar el caché correctamente en una biblioteca de clases para su uso en una aplicación asp.net
Creé mi objeto de caché como un patrón único con un método estático para actualizar el caché que realmente solo está cargando una variable/propiedad miembro con una colección de datos que necesito en caché (por supuesto tiene una lógica de bloqueo). Pensé que era una buena manera de ir ya que sólo puedo acceder a mis datos llamando
MyCacheObject.Instance.MyDataCollection
Estoy creando un nuevo objeto de caché para almacenar una bastante grande cantidad de datos divididos por alguna clave. Lo que estoy diciendo es que estoy creando una nueva memoria caché, pero esta no cargará todos los datos a la vez, sino que almacenará una colección para cada clave a la que se acceda.
MyOtherCacheObject.Instance.MyOtherDataCollection(indexkey)
Esta vez se planteó la cuestión de la recolección de basura. Dado que estoy almacenando una gran cantidad de datos, ¿no sería un desperdicio si se tratara de gc'ed de repente? Como solo se trata de un patrón único, no hay nada que garantice que los datos permanezcan en la memoria caché.
Así que mi pregunta es: ¿cuál es la mejor práctica para implementar un caché para manejar esta situación? Realmente no me gusta una gran solución compleja para esto, y sé que hay almacenamiento en caché en System.Web, pero eso parece un poco "inactivo" ya que esta es solo una biblioteca de clases, ¿o qué piensas?
Me gusta lo que está obteniendo (a pesar de que haría un gran esfuerzo para evitar la IoC). Sin embargo, estás sacando algunas buenas ideas con las que puedo correr. Gracias –
También podría agregar una variable de respaldo y realizar un bloqueo en esa variable si se realiza el conjunto. Mi instinto me dice que podría evitar algunos problemas de enhebrado. –