Variables estáticas en aplicaciones web.

¿Puedo usar variables estáticas en mi aplicación web? ¿Cuáles son las alternativas a la estática? Cuando uso variables estáticas en páginas y más de un usuario usa la aplicación, genera datos de conflicto (datos incorrectos).

¿Cuáles son los límites de usar miembros estáticos?

¿Los miembros estáticos se comparten en la memoria?

Considere almacenar sus variables compartidas en el objeto HttpApplication o en el objeto Cache.

Sin embargo, si está tratando de almacenar valores para cada usuario por separado, debe almacenar esos valores en una variable de sesión.

Las variables estáticas dentro de Asp.Net se comparten en el espacio de memoria del proceso w3svc.exe y NO son seguras para subprocesos. Cualquier usuario de la aplicación puede acceder y modificarlos. Esto podría llevar a modificaciones no deseadas, a menos que escriba su propio mecanismo de locking alrededor del almacenamiento de esos valores.

Deberías probar una syntax como:

Application["KEY"] = value; 

para almacenar datos compartidos de toda la aplicación y

 Session["KEY"] = value; 

para almacenar datos por usuario

Puede utilizar el objeto WebCache para almacenar datos en la memoria del servidor web con condiciones de caducidad. La syntax para que se parece a:

 Page.Cache.Insert("KEY", "VALUE", null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); 

Puede encontrar más información sobre la syntax de la gestión del objeto WebCache en:

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

Solo para agregar a lo que dijo @Jeff Fritz, una aplicación IIS crea un dominio de aplicación en el que se cargan los ensamblados. Al igual que las reglas de una aplicación de Windows normal, si una clase como

 public static class Something { public static string SomeString { get; set; } } 

… entonces solo una propiedad Something.SomeString está disponible por AppDomain. El proceso W3SVC administra el dominio de aplicación, pero no es garantía de seguridad de subprocesos (ya que un dominio de aplicación puede ser servicio de solicitudes múltiples). Si está utilizando propiedades estáticas de solo lectura, es probable que esté bien (como leer valores de configuración). Si está creando propiedades mutables que cambian a lo largo de la vida útil de una solicitud, es mejor usar uno de los mecanismos de almacenamiento detallados en otras preguntas aquí.