C# 静态对象在多个运行的应用程序中是否为同一对象?

C# 静态对象在多个运行的应用程序中是否为同一对象?,c#,winforms,windows-services,C#,Winforms,Windows Services,如果windows服务和windows窗体应用程序使用相同的静态对象,那么这两个应用程序中的对象是否相同?换句话说,如果我在服务中更新对象,如果两个应用程序同时运行,它是否也会在表单应用程序中更新?我认为每个应用程序都在自己的进程中运行。我真的怀疑在Windows服务中更新静态对象是否会对作为Windows窗体应用程序运行的静态对象产生任何影响 Windows服务在系统帐户下运行,而Windows窗体应用程序在用户帐户下运行 正如其他人在评论中指出的,这些进程在不同的内存中运行。每个过程都有 它

如果windows服务和windows窗体应用程序使用相同的静态对象,那么这两个应用程序中的对象是否相同?换句话说,如果我在服务中更新对象,如果两个应用程序同时运行,它是否也会在表单应用程序中更新?

我认为每个应用程序都在自己的进程中运行。我真的怀疑在Windows服务中更新静态对象是否会对作为Windows窗体应用程序运行的静态对象产生任何影响

Windows服务在
系统
帐户下运行,而Windows窗体应用程序在
用户
帐户下运行

正如其他人在评论中指出的,这些进程在不同的内存中运行。每个过程都有 它自己的地址空间

Windows服务响应服务控制管理器命令


它们是完全不同的两件事

它们在不同的进程上运行,因此它们不共享静态对象


与您的问题无关,但在同一应用程序上创建的线程是另一回事。它们将共享静态变量,除非标记为属性

否。除非您执行特定操作以实现此目的,否则对象不会在不同进程之间共享

对此的简单回答是,每个进程都有自己的静态文件,因此不会在服务和桌面进程之间共享

复杂的部分是,在一个过程中,甚至可能存在多个静态实例

Java
中,加载类的每个
ClassLoader
都有一个静态对象实例。我在
C.
中检查了等效功能。我发现这表明在
C#
(我猜实际上是在
CLR
)中确实存在类似于多个类加载器的东西,尽管我没有找到任何关于静态的多个实例的具体引用,但我确信会是这样

简单地说,不,
静态是“
static per AppDomain
”(并且每个进程可以有多个域),因此即使是一个进程也不能安全地假设静态变量将被“共享”(通常为true,除非您手动创建新域,例如,请参见)-例如,web应用通常会打破“静态”单例等。

换句话说,您需要使用某种持久性,以便能够在不同的应用程序之间共享数据。或者使用远程处理、WCF通过应用程序(域)边界进行通信

这与用户帐户无关。不同的进程有不同的内存空间,因此默认情况下不会共享数据。@BrianRasmussen绝对-Sandeep您可能应该对其进行一些编辑。