次の方法で共有


同期属性値

同期属性は宣言型プロパティであり、アクティブ化時にコンポーネントに必要な同期の種類を指定します。 同期属性を含めると、COM+ はユーザーに代わって同期の詳細を処理します。他の呼び出しを行う必要はありません。

オブジェクトは、その要件に応じて、呼び出し元の同期を共有したり、新しい同期を必要としたり、同期なしで動作したりできます。

COM+ には、次の同期属性値が用意されています。

  • 無効。 同期属性を無効にすると、COM+ はオブジェクトのコンテキストを決定する際にコンポーネントの同期要件を無視します。 その結果、オブジェクトは呼び出し元のコンテキスト (および同期) を共有する場合と共有されない場合があります。

    一般に、コンポーネントがリソース マネージャーにアクセスしないことがわかっている場合は、この属性値を使用する必要があります。 COM コンポーネントを COM+ に移行するときは、同期属性を無効にして、未構成の COM コンポーネントと同じ動作をメインする必要があります。 未構成コンポーネントは、COM+ アプリケーションにインストールされていない COM コンポーネントです。

  • サポートされていない。 この値が指定されたオブジェクトは、その呼び出し元のステータスにかかわらず、同期には関与しません。 この設定は、非トランザクションであり、 COM+ ジャストインタイム (JIT) アクティベーション サービスを使用しないコンポーネントでのみ使用できます。

  • サポート対象。 この値が指定されたオブジェクトが存在する場合、このオブジェクトは同期に関与します。 この値は、オブジェクトを呼び出し元の同期で共有するが、独自の同期を必要としない場合に宣言します。

    同期属性を Supported に設定する良い理由は、この設定はシステム リソースの面でコストが低くなる可能性があるということです。 ただし、同時呼び出しからコンポーネントを保護する必要があるため、コンポーネントを記述することはより困難です。 同期属性を Supported に設定すると、特定の状況では、同期されない方法でオブジェクトのインスタンスが作成される可能性があります。 コンポーネントのスレッド モデルが Free または Both の場合は、何らかの種類のロック メカニズムを使用してインスタンス データを保護する必要があります。 スレッド モデルがアパートメント (STA) の場合、インスタンス データを保護する必要はありません。

  • 必須。 この属性を設定すると、COM+ によって、コンポーネントから作成されたすべてのオブジェクトが確実に同期されます。 実際には、COM+ によってコンポーネントのインスタンスが作成されるたびに、一度にこのインスタンスを通過するスレッドが 1 つだけになります。

    COM+ はオブジェクトをアクティブ化すると、呼び出し元の同期状態を確認します。 呼び出し元が同期されている場合、COM+ は呼び出し元の同期境界をフローして新しいオブジェクトを含めます。 それ以外の場合、COM+ は同期を開始します。

  • 新規が必要。 この値が指定されたオブジェクトは、呼び出しに関係するすべてのコンポーネントに代わって COM+ がコンテキストとアパートメントを管理する新しい同期に関与する必要があります。 COM+ は、呼び出し元の同期とは異なる新しい同期を自動的に開始します。

    同期属性を [新規が必要] に設定する良い理由は、この設定を使用すると、コンポーネントのインスタンスへの外部呼び出しをより効率的に行うことができることです。 ただし、オブジェクトとそれを作成したオブジェクトの間の呼び出しも、システム リソースの観点から見るとコストが高くなります。

    たとえば、オブジェクトとその作成者オブジェクトが同じ同期境界を共有している場合を想定します。 クライアント A がクリエーター オブジェクトを呼び出し、クライアント B がオブジェクトを呼び出す場合、2 番目の呼び出しは最初の呼び出しが完了するまで待機する必要があります。 [新規が必要] を設定した場合、オブジェクトは別の同期境界に作成されます。 この場合、他のオブジェクトからの呼び出しを同時に処理できます。 ただし、creator オブジェクトからオブジェクトへの呼び出しでは、同期境界を越える必要があるため、より多くのシステム リソースが必要になります。

同期属性の設定

同期の独立