2008-11-12 55 views
16

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

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

这里的布局中的布丁是由我设置为并行批处理消息的自定义BizTalk适配器使用的程序集。这就是我上面所说的“多个进程”。

回答

10

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

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

+0

网络应用程序怎么样?如果我使用两个OTHER独立程序集(DLL#2和DLL#3)在DLL#1中定义的相同的静态类,将#3定义为网站应用程序,#2是网站引用的DLL,它们是否会共享相同的静态类值? – 2014-07-10 23:01:45

13

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

+0

打败我4秒 – 2008-11-12 16:31:57

2

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

6

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

不,它们都有不同的实例。

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

是的。

2

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

我猜你想要一个单独的dll /项目服务于所有的客户端请求。你可以使用static class/singleton/multiton来实现所需的功能。这真的取决于你想要完成什么。