Para ser sucinto, ¿qué caches en memoria SIMPLE existen en el ecosistema .Net?. Cachés simples en memoria .Net
Lo que estoy buscando es:
- n-configuración (que no sean simples llamadas a la API). No quiero meterme con los archivos de configuración externos porque complican la implementación.
- Mismo proceso (no un proceso externo o servidor). Preferiblemente crean tan fácilmente como
var myCache = new SimpleCache(1024 * 1024 * 100); // 100 MB
- límite de memoria especificado
- Los productos que borran de la memoria caché basada en menos uso
- basada en el tiempo de expiración (no es necesario, pero hace que sea potencialmente útil en otros escenarios)
- Funciona con .Net 3,5
que ya han reasearched estas opciones:
- ASP.Net System.Web.Caching
- su API no admite ningún tipo de control sobre el tamaño de la memoria caché, ni prioridad en función del uso. En consecuencia, está totalmente a su merced en cuanto a cuándo decide que hay suficiente presión de memoria para vaciar el caché.
- System.Runtime.Caching
- no es se añadió una opción como esta en .Net 4.0, y este post parece indicar que tiene bajo rendimiento: Performance of system.runtime.caching
- Microsoft Enterprise Library - Bloque de almacenamiento en caché
- Aparte de tener una reputación de peso pesado, no me gusta su configuración con archivos XML o app.config. Además, aunque admite limitar el tamaño de la memoria caché en función del NÚMERO de objetos almacenados, no tiene mecanismos para limitar el TAMAÑO de esos objetos.
- NCache
- algo excesivo para el caso de uso que quiero, pero lo más importante es que es un producto de pago que no es algo que quiero hacer trato con (en comparación conmigo sólo escribir uno en un día o dos). Como de costumbre, su edición expresa tiene limitaciones de uso que desalientan su uso para cualquier propósito de producción.
- MemCached
- exactamente lo contrario de lo que yo quiero (proceso distribuido externa)
estoy trabajando con Google Protocol Buffers (protobuf-net), por lo que tienen una estimación relativamente precisa de la huella de memoria de cada artículo. Estoy almacenando en caché los datos devueltos por el acceso a la base de datos, pero no deseo utilizar un ORM formal (en realidad estoy usando PetaPoco, pero eso no viene al caso).
En esta etapa, planeo implementar mi propia memoria caché, utilizando una lista de doble enlace y hash (diccionario) para proporcionar elementos que se utilizan menos recientemente desde la memoria caché una vez que se alcanza el límite de la memoria caché. Sin embargo, quería verificar si alguien sabía de alguna opción adecuada antes de poner mi propia cuenta.
Esto nunca es simple, una memoria caché sin una buena política de caducidad es una pérdida de memoria. No me gusta lo que está disponible siempre es la motivación número uno para construir el tuyo. –
En lugar de una política de caducidad, deseo especificar la cantidad máxima de memoria que debería ocupar. Realmente no se puede medir la cantidad de memoria que están ocupando los objetos en .Net, pero los buffers de protocolo que estoy usando tienen una medida razonablemente útil. –
Si desarrolla esto para que sea un caché bastante genérico, ¿entonces quizás podría ponerlo en CodeProject o similar, para que otros lo usen? Debería ser bastante sencillo obtener un prototipo simple y ser muy simple para obtener una cobertura de prueba alta. – Michael