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

时间:2014-06-18 14:10:10

标签: .net process static-members

在.NET中,是否有任何方法可以通过多个进程访问单个静态类成员?我已经读过静态成员的范围是一个ApplicationDomain,而且这些进程可以包含多个ApplicationDomain,但是我一直无法确认ApplicationDomain是否完全局限于单个进程。

我一直都明白/认为流程是由操作系统高度隔离的。此外,在我所做的简单测试中(使用Process.Create()),不同进程中的静态成员似乎是完全独立的。然而,我在CodeReview.SE上收到的这个(非常有帮助的)answer让我想知道是否有可能出现流血现象。

更新:要明确,我有 no desire 从多个进程访问静态成员。我纯粹是想确定是否需要对这种可能性进行编码。如果您对此问题的背景感兴趣,请查看链接的问题。

2 个答案:

答案 0 :(得分:2)

静态变量属于单个appdomain。进程永远不会共享静态变量。您无需对其进行编码。

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

答案 1 :(得分:2)

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

至于共享内存,但是...有许多方法可以在进程之间共享内存。通常,在.NET中,如果您创建一些静态的东西,它将不会在进程(或应用程序域)之间共享。但是,通过本机代码,您可以通过多种机制共享内存页面。汉斯已经提到了内存映射文件。我不同意他们很难做对。我一次又一次地使用它们,从来没有遇到太多问题。

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