Pregunta

Aunque he especificado una clave única, parece que el siguiente código devolverá un valor para 5 solicitudes, luego otro para el próximo par, luego volverá al valor guardado en la solicitud original y simplemente continuará hasta que haya 10 de diferentes objetos, todos almacenados bajo la misma clave. Entonces parece casi aleatorio cuál de estos valores devolverá de la memoria caché.

string strDateTime = string.Empty;
string cachename = "datetimeexample";
object cachedobject = HttpRuntime.Cache.Get(cachename);
if (cachedobject != null)
    strDateTime = (string)cachedobject;
else
{
    strDateTime = DateTime.Now.ToString();
    HttpRuntime.Cache.Insert(cachename, strDateTime, null, DateTime.MaxValue, TimeSpan.FromDays(10), CacheItemPriority.NotRemovable, null);
}
Response.Write(strDateTime +"        keys:"+ HttpRuntime.Cache.Count);

Muy confundido, ¿se debe a hilos o algo así?

¿Fue útil?

Solución

Ignorando la posibilidad de una granja de servidores y un equilibrio de carga, este comportamiento puede ser causado por el grupo de aplicaciones que se ejecuta como jardín web . Para citar la sección relevante de MSDN:

  

Porque los jardines web permiten el uso de   múltiples procesos, cada proceso   tener su propia copia de la solicitud   estado, estado de sesión en proceso,   cachés y datos estáticos. Jardines web   no debe usarse para todos   aplicaciones, especialmente si necesitan   para mantener el estado Asegúrate de   comparar el rendimiento de la   aplicación antes de decidir si   El modo de jardín web es apropiado.

Esto hará que parezca que el almacenamiento en caché está almacenando múltiples valores para la misma clave, teniendo efectivamente entradas duplicadas en el caché.

Para resolver esto en IIS 7, abra la Configuración avanzada del grupo de aplicaciones y establezca Procesos máximos de trabajadores en 1. Para IIS 6, consulte Artículo de MSDN (con bonitas capturas de pantalla).

Aunque con 8 meses de retraso, estoy respondiendo esta pregunta porque la encontré mucho antes de encontrar este artículo decente sobre las trampas del jardín web . Esperemos que esta respuesta les ahorre a los futuros buscadores un poco de tiempo. :)

Otros consejos

Su clave de caché siempre es 'datetimeexample', por lo tanto, siempre tendrá un objeto en caché; y siempre recibirá ese objeto de vuelta.

No estoy muy seguro de lo que está tratando de lograr aquí, en lo que a mí respecta, esto se comporta exactamente de la forma en que se supone que debe hacerlo.

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