2012-04-04 9 views

Respuesta

8

Se ejecutan en procesos diferentes para que no compartan el objeto estático.

No está relacionado exactamente con su pregunta, pero los hilos creados en la misma aplicación son una historia diferente. Compartirán la variable estática a menos que esté marcado con ThreadStatic atributo

0

Creo que cada aplicación se ejecuta en su propio proceso. Realmente dudo que la actualización de un objeto estático en el servicio de Windows tenga algún efecto sobre el objeto estático que se ejecuta como aplicación de formularios de Windows.

El servicio de Windows se ejecuta en la cuenta system donde, como una aplicación de formularios de Windows, se ejecuta en la cuenta User.

Como han señalado otros en los comentarios, los procesos se ejecutan en diferentes memorias. Cada proceso tiene su propio espacio de direcciones.

El servicio de Windows responde a los comandos del Administrador de control de servicios.

Son completamente dos cosas diferentes.

+2

Esto no tiene nada que ver con las cuentas de usuario. Los diferentes procesos tienen espacios de memoria separados y, por lo tanto, no comparten datos por defecto. –

+0

@BrianRasmussen absolutamente - Sandeep probablemente debas editarlo un poco. – NSGaga

2

No. A menos que haga algo específico para lograr este objeto, no se comparten entre procesos diferentes.

0

La respuesta simple a esto es que cada proceso tiene su propia estática, por lo que no, no se compartirá entre el servicio y el proceso del escritorio.

La parte complicada es que incluso puede haber varias instancias de una estática en un solo proceso.

En Java hay una instancia del objeto estático para cada ClassLoader que carga la clase. Comprobé la funcionalidad equivalente en C#. Encontré this question on SO que sugiere que de hecho hay algo similar a varios cargadores de clases en C# (supongo que en realidad en CLR) y aunque no encontré ninguna referencia específica a varias instancias de una estática, estoy seguro de que ese sería el caso.

0

En pocas palabras, no,
estática es 'static per AppDomain' (y que podría tener varios dominios por proceso), por lo que ni siquiera por un proceso es seguro asumir que sus variables estáticas serán 'compartidos' (normalmente es cierto a menos usted crea nuevos dominios a mano, por ejemplo, vea What is AppDomain?) - por ej. las aplicaciones web normalmente rompen los singleton "estáticos", etc.
En otras palabras, necesita utilizar algún tipo de persistencia para poder compartir sus datos entre diferentes aplicaciones. O utilice la comunicación remota, WCF para comunicarse sobre los límites de la aplicación (dominio).

Cuestiones relacionadas