4

アセンブリが複数のアプリケーション ドメインに読み込まれます。アセンブリの Jit-ting はプロセスごとに 1 回実行されますか? それとも、アプリドメインごとに1回ですか?

それとも全体的にもっと複雑なものですか?

4

1 に答える 1

3

複雑です。このmsdnの記事は言う

アセンブリがドメイン ニュートラルとして読み込まれる場合、そのコードを別の AppDomain で再利用できることを意味します。アセンブリがドメイン バインド (既定) として複数の AppDomain に読み込まれる場合、各 AppDomain は独自のコードのコピーを取得します。これには、いくつかの悪いパフォーマンス特性があります。まず、CPU コストです。アセンブリのネイティブ イメージがある場合、最初の AppDomain だけがネイティブ イメージを使用できます。他のすべての AppDomains は、コードを JIT コンパイルする必要があり、CPU コストが大幅に増加する可能性があります。

次に、JIT コンパイルされたコードはプライベート メモリに存在するため、他のプロセスや AppDomains と共有することはできません。アセンブリに NGEN イメージが含まれていた場合、最初の AppDomain はそのイメージを使用します。他のすべての AppDomains は、コードを JIT コンパイルする必要があります。つまり、そのアセンブリの MSIL DLL も読み込まれます。これは、そのアセンブリのディスク アクセスが 2 倍になるため、コールド スタートアップの観点からは最悪のシナリオです。

アセンブリをドメイン ニュートラルとして読み込むと、ネイティブ イメージが存在する場合は、アプリケーションで作成されたすべての AppDomains で確実に使用されます。ネイティブ イメージが存在しない場合でも、アセンブリをドメイン ニュートラルとして読み込むことには利点があります。これは、コードがコンパイルされるのは 1 回だけで、アプリケーション内のすべての AppDomain で共有されるためです。

于 2013-09-17T14:00:49.787 に答える