19

一度に複数のプロセスで使用できるアセンブリがあります。静的クラスを使用している場合、複数のプロセスはすべてそのクラスの同じ「インスタンス」を使用しますか?

プロセスが分離されているため、これらは異なるアプリケーション ドメインで実行されているので、静的な「インスタンス」は分離されていますか?

ここでの詳細のプディングは、アセンブリがカスタム BizTalk アダプターによって使用されており、メッセージを並列バッチで処理するように設定されていることです。それが、私が上で「複数のプロセス」と呼んでいるものです。

4

5 に答える 5

13

静的クラスは、アプリケーション ドメインごとに 1 つ存在します。あなたの場合、アダプターが同じアプリケーションドメインで複数のスレッドを使用しているか (静的クラスの単一インスタンスを共有している)、または複数のプロセスを使用しているか (静的クラスの個別のインスタンスを持っている) によって異なります。

于 2008-11-12T16:30:32.653 に答える
11

複数のスレッドがインスタンスを共有します。このため、静的クラスはスレッド間で状態を渡すのに便利ですが、競合状態 (Monitorまたはlockプロパティ) を導入しないように十分に注意する必要があります。

ただし、複数のプロセスは個別の AppDomains にある必要があるため、それぞれに独自のインスタンスがあります。

于 2008-11-12T16:30:36.680 に答える
6

「一度に複数のプロセスで使用できるアセンブリがあります。静的クラスを使用している場合、複数のプロセスはすべてそのクラスの同じ「インスタンス」を使用しますか?」

いいえ、それらはすべて個別のインスタンスを持っています。

「プロセスが分離されているため、これらは異なるアプリケーション ドメインで実行されているので、静的な「インスタンス」は分離されていますか?」

はい。

于 2008-11-12T16:31:20.703 に答える
3

静的クラスのスコープは、アプリケーション ドメインに限定されます。各アプリ ドメインには、ユーザーが持つ可能性のある静的変数の独自のコピーがあります。「プロセス」が同じアプリ ドメイン内のスレッドである場合、それらは静的な値を共有します。しかし、それらが実際に別個の Windows プロセスである場合、それらは異なるアプリ ドメインを持つため、別個のコピーになります。

于 2008-11-12T16:31:13.463 に答える
2

Singleton パターンを参照してください。要点は、サービスインスタンスの数を制御したいということです。

すべてのクライアント要求にサービスを提供する個別の dll/プロジェクトが必要だと思います。静的クラス/シングルトン/マルチトンを使用して、目的の機能を実装できます。それは本当にあなたが達成しようとしていることに依存します。

于 2008-11-12T20:50:27.717 に答える