2008-11-12 12 views
16

Ich habe eine Baugruppe, die von mehreren Prozessen gleichzeitig verwendet werden kann. Wenn ich eine statische Klasse verwende, würden die mehreren Prozesse alle die gleiche "Instanz" dieser Klasse verwenden?Was ist der Umfang einer statischen Klasse?

Da die Prozesse getrennt sind, würden diese unter verschiedenen Anwendungsdomänen ausgeführt werden, also die statischen "Instanzen" getrennt haben?

Der Pudding in den Details hier ist, dass die Assembly von einem benutzerdefinierten BizTalk-Adapter verwendet wird, die für die Verarbeitung der Nachrichten in parallelen Stapeln festgelegt werden. Das nenne ich "multiple processes" oben.

Antwort

10

Mehrere Threads teilen sich eine Instanz. Aus diesem Grund kann eine statische Klasse für das Übergeben von Status zwischen Threads geeignet sein, aber Sie müssen sehr vorsichtig sein, keine Race-Bedingungen einzuführen (Monitor oder lock Ihre Eigenschaften).

Allerdings sollten mehrere Prozesse in separaten AppDomains sein und daher jeweils eine eigene Instanz haben.

+0

Was ist mit einer Webanwendung. Wenn ich dieselbe statische Klasse verwende, die in DLL # 1 von zwei ANDEREN separaten Assemblys (DLL # 2 und DLL # 3) definiert wurde, die # 3 eine Websiteanwendung und # 2 eine von der Website referenzierte DLL sind, würden sie dieselbe statische Klasse teilen Werte? –

+1

@LordofScripts Ja, weil sie sich alle in derselben AppDomain befinden –

13

Statische Klassen existieren einmal pro Anwendungsdomäne. In Ihrem Fall hängt es davon ab, ob der Adapter mehrere Threads in derselben Anwendungsdomäne verwendet (also eine einzelne Instanz der statischen Klasse gemeinsam nutzt) oder mehrere Prozesse verwendet (also separate Instanzen der statischen Klasse hat).

+0

Beat mich um 4 Sekunden –

2

Der Bereich einer statischen Klasse ist auf die Anwendungsdomäne beschränkt. Jede App-Domäne hat eine eigene Kopie aller statischen Variablen, die Sie haben könnten. Wenn Ihre "Prozesse" Threads innerhalb derselben App-Domäne sind, teilen sie sich die statischen Werte. Wenn es sich jedoch um separate Windows-Prozesse handelt, haben sie unterschiedliche Anwendungsdomänen und separate Kopien.

6

"Ich habe eine Assembly, die von mehreren Prozessen gleichzeitig verwendet werden kann. Wenn ich eine statische Klasse verwende, würden alle mehrere Prozesse die gleiche" Instanz "dieser Klasse verwenden?"

Nein, sie haben alle getrennte Instanzen.

"Da die Prozesse getrennt sind, würden diese unter verschiedenen Anwendungsdomänen ausgeführt werden, daher müssen die statischen" Instanzen "getrennt werden?"

Ja.

2

Sie können sich das Singleton-Muster ansehen. Das Wesentliche scheint zu sein, dass Sie die Anzahl der Dienstinstanzen steuern wollen.

Ich vermute, dass Sie eine separate DLL/Projekt für alle Client-Anfragen wünschen. Sie können statische Klasse/Singleton/Multiton verwenden, um die gewünschte Funktionalität zu implementieren. Es hängt wirklich davon ab, was Sie erreichen möchten.