COM+ リソース ディスペンサーの呼び出しは、次のいずれかのスレッドの種類で発生する可能性があります。
- アパートメント スレッド (STA)
- フリー スレッド (MTA)
- COM 以外のスレッド (アプリケーションまたは ディスペンサー マネージャー ガベージ コレクター スレッド)
リソース ディスペンサーが COM オブジェクトでない場合は、任意のスレッドから着信した呼び出しをいつでも処理できる必要があります。 リソース ディスペンサーが COM オブジェクトの場合、COM オブジェクトは両方の のスレッド モデル登録する必要があります。 これにより、STA または MTA スレッドは、スレッド スイッチなしでリソース ディスペンサーを作成して使用できます。
リソース ディスペンサーが別の COM オブジェクト (プロセス外のリソース マネージャーなど) を作成して使用する場合、リソース ディスペンサーは、この他の COM オブジェクトに対して複数のプロキシを維持し、呼び出し元のスレッドに適したプロキシを使用してオブジェクトの呼び出しが行われるようにする必要がある場合があります。 リソース ディスペンサーは、このオブジェクトを作成すると、参照をマーシャリングして保存します。 オブジェクトを再度呼び出す前に、呼び出し元のスレッドのプロキシを作成するために、オブジェクトのマーシャリングを解除する必要があります。
スレッド ID からプロキシ ポインターへのマップを保持することで、これらのスレッドごとのプロキシをキャッシュする方が効率的な場合があります。 このマップは、プロセスで新しいスレッドが使用されると拡張されます。
関連トピック