2011-02-28 6 views
5

Esto podría ser solo una pregunta teórica, pero no he podido encontrar una respuesta satisfactoria.¿Puede la memoria caché (u otras variables) cambiar durante la ejecución del código?

Estoy usando la memoria caché en uno de mis sitios, lo que me hizo pensar en sus datos y cuándo y si cambian. ¿Puede cambiar la memoria caché durante la ejecución de algún código?

He aquí un ejemplo

if (Cache["name"] != null) { 

    // Long and heavy code execution done here 

    if (Cache["name"] == null) Response.Write("Lost the data"); 
} 

¿Puede el proceso que cambia la caché de aplicación en paralelo con el código anterior o se espere hasta que haya terminado?
¿Existe una posibilidad teórica de que esto imprima "Perdió los datos"?

En caso afirmativo, ¿es siempre una buena práctica para salvar la variable primera o Siempre verifique nula y nunca no nula?

¡Gracias de antemano!

/Niklas

Respuesta

4

Absolutamente lo posible.

valores Siempre instantáneas de la memoria caché, y el trabajo con la instantánea:

var snapshot = Cache["name"]; 
if(snapshot != null) {...} 

y utilizar snapshot largo. Cuando se trata de enhebrar, lo anterior es generalmente un enfoque sensato; la única advertencia es que puede consultar Interlocked para obtener una variedad de métodos que le permiten ver (con seguridad) si una variable/campo cambió mientras no miraba, y solo aplicar un cambio si no hubiera cambiado.

+0

Marc, ya que estás aquí. ¿Te importaría responder mi último comentario sobre RBAC que me ayudaste este viernes =)? – Niklas

0

Seguramente puede caducar por lo que debe verificarse la nulidad antes de usarlo. Y como dijiste es bueno mantener una copia guardada para trabajar.

Cuestiones relacionadas