次の方法で共有


アドインのパフォーマンス

更新 : 2007 年 11 月

アドインのパフォーマンスは、パイプライン コントラクトに対してドメイン中立の読み込みを使用することで向上できます。パイプライン セグメントのネイティブ イメージを生成することによって、アクティブ化を向上することもできます。

ドメイン中立の呼び出しによるドメイン間呼び出しの向上

アドインが個別のアプリケーション ドメインに読み込まれる場合、ホストとアドイン間の呼び出しは、パイプラインによりアプリケーション ドメイン境界を越えてマーシャリングされます。これらのドメイン間呼び出しのパフォーマンスは、コントラクトが含まれるアセンブリをドメイン中立で読み込むことによって、大幅に向上します。

アセンブリは、厳密な名前を持ち、グローバル アセンブリ キャッシュにインストールする必要があります。さらに、LoaderOptimizationAttribute と、LoaderOptimization.MultiDomainHost フラグまたは LoaderOptimization.MultiDomain フラグを持つ必要があります。

JIT コンパイラの回避によるアクティブ化の向上

アドインが個別のアプリケーション ドメインでアクティブ化される場合は特に、Just-In-Time (JIT) コンパイラによって、アドインのアクティブ化のパフォーマンス オーバーヘッドが実質的に増加します。JIT コンパイラの使用を回避するには、以下のガイドラインに従います。

  • パイプライン アセンブリに厳密な名前を指定し、それをグローバル アセンブリ キャッシュにインストールします。

  • ネイティブ イメージ ジェネレータ (Ngen.exe) を使用して、パイプライン アセンブリのネイティブ イメージを作成します。

  • 前のセクションで説明したように、コントラクトが含まれるアセンブリをドメイン中立で読み込みます。

    メモ :

    これは非常に重要なポイントです。コントラクトがドメイン中立で読み込まれないと、アドイン側のコンポーネントはネイティブ イメージを使用できません。

  • LoaderOptimizationAttribute を、MultiDomainHost フラグまたは MultiDomain フラグを指定してホストに適用することで、.NET Framework アセンブリのネイティブ イメージをアプリケーション ドメイン間で共有します。

    メモ :

    デバッガで実行している場合には、このパフォーマンスの向上は認められません。ホスト プロセス (vshost.exe) にアセンブリ共有が設定されていないためです。ホスト プロセスを無効にすることもできますが、これはお勧めできません。デバッガで実行しているときにパフォーマンスを測定しないでください。

参照

概念

アプリケーション ドメインとアセンブリ

参照

LoaderOptimizationAttribute

LoaderOptimization

ネイティブ イメージ ジェネレータ (Ngen.exe)