19

我有一个程序集,一次可以由多个进程使用。如果我使用的是静态类,多个进程是否都使用该类的相同“实例”?

由于进程是分开的,它们会在不同的应用程序域下运行,因此静态“实例”是否分开?

此处详细信息中的布丁是该程序集正由一个自定义 BizTalk 适配器使用,我将其设置为并行批处理消息。这就是我上面所说的“多进程”。

4

5 回答 5

13

每个应用程序域存在一次静态类。在您的情况下,这取决于适配器是在同一应用程序域中使用多个线程(因此共享静态类的单个实例)还是使用多个进程(因此具有静态类的单独实例)。

于 2008-11-12T16:30:32.653 回答
11

多个线程将共享一个实例。出于这个原因,静态类可以方便地在线程之间传递状态,但是您需要非常小心不要引入竞争条件(Monitorlock您的属性)。

但是,多个进程应该位于不同的 AppDomain 中,因此每个进程都有自己的实例。

于 2008-11-12T16:30:36.680 回答
6

“我有一个程序集可能一次被多个进程使用。如果我使用的是静态类,多个进程是否都使用该类的相同“实例”?

不,它们都有单独的实例。

“由于进程是分开的,它们会在不同的应用程序域下运行,因此静态“实例”是否分开?”

是的。

于 2008-11-12T16:31:20.703 回答
3

静态类的范围仅限于应用程序域。每个应用程序域都将拥有自己可能拥有的任何静态变量的副本。如果您的“进程”是同一应用程序域中的线程,那么它们将共享静态值。但是,如果它们是实际独立的 Windows 进程,那么它们将具有不同的应用程序域,因此会有不同的副本。

于 2008-11-12T16:31:13.463 回答
2

您可能想查看单例模式。要点似乎是您要控制服务实例的数量。

我猜您想要一个单独的 dll/项目来服务所有客户端请求。您可以使用静态类/单例/多例来实现所需的功能。这实际上取决于您要完成的工作。

于 2008-11-12T20:50:27.717 回答