我有一个程序集,可能同时被多个进程使用。如果我使用静态类,那么这些多个进程是否都会使用同一个类的“实例”?
由于这些进程是分离的,它们运行在不同的应用程序域下,因此静态“实例”也是分开的吗?
需要注意的是,该程序集正在被自定义的BizTalk适配器使用,该适配器可以被设置为并行处理消息。这就是我上面所说的“多个进程”。
我有一个程序集,可能同时被多个进程使用。如果我使用静态类,那么这些多个进程是否都会使用同一个类的“实例”?
由于这些进程是分离的,它们运行在不同的应用程序域下,因此静态“实例”也是分开的吗?
需要注意的是,该程序集正在被自定义的BizTalk适配器使用,该适配器可以被设置为并行处理消息。这就是我上面所说的“多个进程”。
静态类在每个应用程序域中只存在一次。 在您的情况下,这取决于适配器是否在同一个应用程序域中使用多个线程(从而共享静态类的单个实例)或使用多个进程(从而拥有静态类的分开实例)。
多个线程将共享一个实例。因此,静态类可以方便地在线程之间传递状态,但您需要非常小心,以避免引入竞态条件(Monitor
或lock
属性)。
但是,多个进程应该位于单独的AppDomains中,因此每个进程都有自己的实例。
我有一个程序集可能会被多个进程同时使用。如果我使用静态类,那么这些进程会同时使用同一个类的“实例”吗?
不会,它们都有独立的实例。
既然这些进程是独立的,那么它们是否在不同的应用程序域中运行,因此具有静态“实例”分开?
是的。
静态类的作用域仅限于应用程序域。每个应用程序域都将拥有自己的静态变量副本。如果您的“进程”是同一应用程序域内的线程,则它们将共享静态值。但如果它们是实际的不同Windows进程,则它们将具有不同的应用程序域,因此具有不同的副本。