2010-12-07 8 views
5

Duplicar posibles:
ASP .NET Singletonclase Singleton o una clase con métodos estáticos en aplicación MVC ASP.NET

I conocer las diferencias generales entre clase singleton y una clase con propiedades estáticas/métodos, pero me gustaría saber cómo influye en la concurrencia (muchos usuarios iniciaron sesión en una aplicación) en una aplicación web ASP.NET MVC? Por ejemplo, estamos almacenando configuraciones en nuestra clase singleton (o propiedades estáticas). ¿Existe la posibilidad de que dos usuarios comiencen a ver/compartir la misma configuración de repente? Quiero decir, si un usuario cambia su configuración (ya que están almacenados en la memoria durante el tiempo de ejecución de la aplicación), ¿afectará al otro usuario? Hasta donde yo sé, IIS crea un proceso w3wp.exe para una aplicación, por lo tanto, todos los usuarios/visitantes estarán dentro del mismo proceso, por lo que podría tener un efecto en algo?

+0

Dupe de esta, que a su vez es una víctima también: http://stackoverflow.com/ questions/3714971/difference-between-singleton-class-and-static-class – jfar

+0

jfar detenga sus tonterías, si tiene que señalar algo al menos, hágalo bien. Mi pregunta es de hecho un engaño, pero no es una estafa de lo que vinculó ... – mare

+0

Ay, eso es duro.El arroz estaba ardiendo, estaba tratando de ser rápido y vinculado a la pregunta incorrecta. Hay otra pregunta más sobre la computación en algún lugar. Pensé que el que estaba relacionado era el correcto. – jfar

Respuesta

10

Respuesta breve, sí, los usuarios verán el mismo valor para cualquier propiedad estática. Será compartido entre las sesiones.

Respuesta larga: sí y si cada sesión intenta actualizar propiedades compartidas al mismo tiempo, puede terminar con un comportamiento no deseado, especialmente si la propiedad compartida (estática) es un tipo que crece dinámicamente (cualquier tipo de colección) . Deberá gestionar la concurrencia al acceder o modificar los valores de las propiedades compartidas.

La única razón para tener una clase única o estática es específicamente compartir un conjunto de valores/configuraciones/datos de configuración con todas las conexiones. Mantiene la utilización de memoria baja si todos los usuarios necesitan la misma información. En este caso, debe tener cuidado de inicializar los valores solo una vez o actualizarlos de forma atómica utilizando un bloqueo para asegurarse de que solo un hilo está cambiando la información a la vez. Cualquier número de hilos podría leer los datos sin interferir entre ellos.

Si necesita valores diferentes para diferentes usuarios, es mejor usar propiedades de instancia, ya que no tendrá que preocuparse por la concurrencia y el golpe de rendimiento asociado con el bloqueo.

Los métodos estáticos están bien. La única diferencia real entre instancia y métodos estáticos es la manera en que se llaman. Incluso los métodos de instancia se guardan en la memoria en una sola ubicación. Solo las propiedades de la instancia tienen su propio espacio de memoria.

7

Su pensamiento es correcto, varias clases estáticas y estáticas son compartidas por varios usuarios. No es bueno si se supone que la información almacenada es 'específica para el usuario'.

"IIS crea un proceso w3wp.exe para una aplicación, por lo tanto, todos los usuarios/visitantes estarán dentro del mismo proceso, ¿podría esto tener un efecto sobre algo?"

Nuevamente, su objetivo correcto, tener una clase singleton en la aplicación ASP.Net significa que solo habrá una instancia del objeto en el proceso.

creo que podría beneficiarse al conocer un poco acerca de los servidores de sesión fuera de proceso: http://msdn.microsoft.com/en-us/library/ms972429.aspx

HTH

+0

no entiendo quién está dando este downvotes sin explicación a las respuestas perfectamente razonables ... por votación – mare

+0

¡Gracias! Solía ​​trabajar para el soporte de Microsoft Pro Dev, sé que sabes de lo que estás hablando y estaba de acuerdo. Para alguien a quien votar (tal vez debido al bit de la sesión fuera del proceso) es de mala calidad. Cheers mare ps edit * Yo también te devolví a cero :) –

Cuestiones relacionadas