2010-10-26 12 views
14

Si tuviera una clase con una propiedad estática que se configura cuando un usuario carga una página en particular, ¿ese valor estático es exclusivo de la sesión de ese usuario?¿Cómo funcionan las propiedades estáticas en un entorno asp.net?

En otras palabras, si un segundo usuario carga la página y establece la propiedad estática, ¿tendrá cada usuario un valor distinto o ambos usarán el segundo valor de los usuarios?

+1

¿Ha leído la documentación o intentado hacerlo por su cuenta? –

Respuesta

13

Las estadísticas son exclusivas del dominio de la aplicación, todos los usuarios de ese dominio de aplicación compartirán el mismo valor para cada propiedad estática. Cuando vea la palabra estática, piense que "solo habrá una instancia de esto". El tiempo que dure esa instancia es una pregunta separada, pero la respuesta corta es que es variable.

Si desea almacenar valores específicos para el usuario, busque en Session State.

1

No, no es nada especial solo porque es asp.net. ASP.NET en sí mismo es solo una colección de ensamblaje regular de .NET. Si desea guardar cosas por sesión, debe usar el estado de la sesión. Si no, tenga cuidado ya que hay muchos hilos que pueden acceder a sus datos estáticos. Debes leer y aprender cómo funcionan los hilos, las cerraduras y las condiciones de carrera juntas.

2

Los campos y propiedades estáticos se comparten en todas las instancias de una clase. Todos tus usuarios terminarán compartiendo el mismo valor.

El valor estará allí hasta que el proceso de trabajo ASP.NET se recicle (lo que sucede periódicamente).

+0

+1 - Obtuve el bit una vez, al haber eliminado estúpidamente la lógica de asignación de una propiedad estática. El valor se mantuvo lo suficiente como para que casi me olvidara de él, y pasé un buen día desenrollando el desastre cuando la piscina * realmente * se recicló. Moraleja de la historia: tenga cuidado con la estática, como en cualquier caso, pero especialmente en ASP.NET. – Dan

2

Además de la respuesta de Bob, no es esta excepción, por supuesto:

public static object Item { 
    get { return HttpContext.Current.Session["some_key"]; } 
} 
+0

Y muchos otros: 'HttpContext.Current' en sí mismo, por ejemplo, y' DateTime.Now'. Los campos estáticos se comparten (a menos que estén decorados con el atributo 'ThreadStatic'), pero las propiedades estáticas pueden hacer lo que quieran. – Joe

Cuestiones relacionadas