既定のコンテキストにおけるアクティブ化の適用
通常、構成された COM コンポーネントは、独自のコンテキストでアクティブ化されます。つまり、COM+ はコンポーネント カタログ情報を参照して、構成済みサービスを提供します。 ただし、既定のコンテキストで構成済みコンポーネントをアクティブ化することを選択できます。 基本 COM コンポーネント (COM+ カタログ情報を持たない登録済みコンポーネント) は通常、既定のコンテキストでアクティブ化されます。
既定のコンテキストで COM コンポーネントをアクティブ化すると、次のようにパフォーマンス上の大きな利点が 3 つあります。
- システム リソースを節約するため、作成されるコンテキストの数を制限します。
- クロス コンテキスト呼び出しの数を制限することにより、パフォーマンスを高めます。 コンテキスト間の呼び出しはマーシャリングを必要とするため、既定のコンテキストでアクティブ化された COM オブジェクトが既定のコンテキストで他のオブジェクトを呼び出す方がはるかに高速です。 この場合 (同じコンテキスト内での呼び出し) のパフォーマンスは、サブルーチンを呼び出す場合と似ています。
- 古い COM アプリケーションを COM+ にインポートし、問題なく実行することができます。 たとえば、複数の古い COM アプリケーションが、参照をマーシャリングせずにアパートメント内でオブジェクト参照を渡すことができるという前提で実装されていることがあります。 オブジェクト参照はコンテキスト境界を越えて渡されるため、COM+ にインポートすると、これらの COM アプリケーションは機能しません。 ただし、コンポーネント サービス管理ツールを使用してアプリケーション内のすべてのクラスを [既定のコンテキストでアクティブ化する必要があります] とマークする場合、インポート時にこの種類の COM アプリケーションを実行することができます。
既定のコンテキストで構成済みコンポーネントをアクティブ化することの主なデメリットは、COM+ ではコンポーネントの構成済みサービスが提供されないことです。 パフォーマンス向上と COM+ サービスを使用できることにはトレードオフがあります。
たとえば、COM コンポーネントに COM+ サービス (トランザクション、ジャスト イン タイム アクティベーション、イベント、キューに登録されたコンポーネント、同期、オブジェクト プールなど) が必要なく、コンポーネントが既定のコンテキストでアクティブ化される可能性がある他の COM コンポーネントに対して多数の呼び出しを行うとします。 この場合、既定のコンテキストで呼び出し元コンポーネントをアクティブ化することをお勧めします。
COM コンポーネントに COM+ サービスが必要な場合、[既定のコンテキストでアクティブ化する必要があります] とマークすることはできません。 さらに、既定のコンテキストでアクティブ化された COM オブジェクトが他のコンテキストのオブジェクトに対して多数の呼び出しを行った場合、実際のパフォーマンスは向上しません。 (詳しくは、「コンテキスト」を参照)。
既定のコンテキストでアクティブ化を適用するには
コンポーネント サービス管理ツールの詳細ウィンドウで、既定のコンテキストでアクティブ化するコンポーネント (選択された COM+ アプリケーションの Components フォルダー内にある) を右クリックし、[プロパティ] をクリックします。
コンポーネントのプロパティ ダイアログ ボックスで、[アクティブ化] タブをクリックします。
[既定のコンテキストでアクティブ化する必要があります] チェック ボックスをオンします。
OK をクリックします。
Note
既定のコンテキストで構成済みコンポーネントを実行すると、COM+ は、そのコンポーネントに対して構成されたサービスをアクティブ化しません。 [既定のコンテキストでアクティブ化する必要があります] チェック ボックスをオフにした後、構成済みコンポーネントを独自のコンテキストで実行すると、これらのサービスが再び使用可能になります。
関連トピック