.NET ApplicationDomain是否可以包含多个进程?

.NET ApplicationDomain是否可以包含多个进程?,.net,process,static-members,.net,Process,Static Members,在.NET中,有没有一种方法可以让多个进程访问单个静态类成员?我已经了解到静态成员的作用域是ApplicationDomain,并且进程可以包含多个ApplicationDomain,但是我无法确认ApplicationDomain是否完全局限于单个进程 我一直理解/相信操作系统会高度隔离进程。另外,在我所做的简单测试中(使用Process.Create()),不同进程中的静态成员似乎是完全独立的。然而,我在CodeReview.SE上收到的这一点(非常有用)让我怀疑是否有可能流血 更新:明确地

在.NET中,有没有一种方法可以让多个进程访问单个静态类成员?我已经了解到静态成员的作用域是ApplicationDomain,并且进程可以包含多个ApplicationDomain,但是我无法确认ApplicationDomain是否完全局限于单个进程

我一直理解/相信操作系统会高度隔离进程。另外,在我所做的简单测试中(使用
Process.Create()
),不同进程中的静态成员似乎是完全独立的。然而,我在CodeReview.SE上收到的这一点(非常有用)让我怀疑是否有可能流血


更新:明确地说,我不希望从多个进程访问静态成员。我只是想确定是否需要针对这种可能性编写代码。如果您对此问题的背景感兴趣,请参阅链接问题。

静态变量属于单个appdomain。进程从不共享静态变量。您不需要针对它编写代码


默认情况下,进程是隔离的。您必须积极地在两个进程之间共享内存。CLR不会尝试与其他进程通信。

否,AppDomain不能在多个进程下运行。AppDomains的创建是为了允许单个进程安全地隔离同一进程中的多个应用程序。因此,根据定义,AppDomain不能存在于多个进程中

至于共享内存,但是。。。有许多方法可以在进程之间共享内存。通常,在.NET中,如果您将某个内容设置为静态,则它不会在进程(或应用程序域)之间共享。但是,通过本机代码,您可以通过多种机制共享内存页。Hans已经提到了内存映射文件。我不同意他们很难做到正确。我时不时地使用它们,从来没有遇到过太多问题


另一种方法是共享数据和代码段。如果多次运行同一应用程序,则可以在应用程序实例之间共享任何共享段。在.NET中实现这一点并不容易,可能需要修改最终的PE格式才能正常工作。

当然,.NET进程必须遵守操作系统对任何进程施加的约束。虚拟内存是确保一个进程不会损坏另一个进程状态的基本机制。突破障碍是可能的,通过内存映射文件实现共享内存是低级方法。很难做到正确,WCF通常是明智的选择。@HansPassant,你似乎指出这种做法远远超出了正常行为的范围,对吗?你需要一个很好的理由来这样做。当您的进程崩溃时,您会破坏某些东西,这显然是一种风险,因此另一个进程当然不会对此感到非常高兴。