2009-04-22 6 views
9

AppDomainを特に作成しない場合でも、C#プログラムごとにAppDomainはありますか?なぜそれが必要ですか?私は、サードパーティ製のアセンブリについて、別のAppDomainにロードしなければ、アプリケーション全体がクラッシュすることについて読んできました。私はその点をうまく理解しませんでした。誰もこれを説明することができます。C#プログラムごとにAppDomainはありますか?

答えて

15

AppDomainは、あなたのアプリケーションが実行するインフラストラクチャです。.NETアセンブリを実行するには、AppDomainにロードする必要があります。サードパーティのアセンブリを個別のAppDomainsにロードする必要はありませんが、実行すると、2つの別々のプロセスのようにそれらの間の分離が行われ、一方では誤動作が他方には影響しません。アプリケーションドメインは独立してアンロードできます。

たとえば、SQL Serverでは、プロセスでCLRアセンブリを安全にロードするために、AppDomainを使用します。

2

すべてのアプリケーションには少なくとも1つのアプリケーションドメインがあります。

サードパーティ製のアセンブリが意味することはわかりません。

1

すべてのプログラムに少なくとも1つのappdomainがありますが、好きな数だけ作成することはできますが、ほとんどの場合は1つ以上のappdomainは必要ありません。

基本的には、特定の信頼関係で実行されているコードが実行されているコンテナです。

1

アプリケーションがロードされるデフォルトのアプリケーションドメインがあります(すべてのインスタンスが独自のものを取得します)。

クラッシュは、別のアプリドメインにクラッシュされた場合に、サードパーティのアセンブリ(つまりプラグイン)がクラッシュしたときにクラッシュすることを意味します。したがって、別のアプリドメインにプラグインを読み込むことをお勧めします。これは、アプリドメインのクラッシュによってそのアプリドメインのみがクラッシュし、他のドメインはクラッシュしないためです。 CLR Add-In blogにはこれに関するいくつかの記事があります。

重要な点は、アプリドメインは必ずしも同じプロセスまたは同じシステムにある必要はないため、リモーティングには基本的に必要になることです。

3

我々はAppDomainの

を使用しない場合、私は、私はあなたが別のアプリケーションドメインにして他のアセンブリをロードについて話していると思うのクラッシュの原因となるサードパーティのアセンブリについて読んだことがあります。こうすることで、自分のアドレススペースから分離して、コードにクラッシュを起こさせないようにすることができます。すべての呼び出しをアプリのドメイン境界全体に分散させる必要があるため、別個のアプリドメイン内のアセンブリとの通信は難しく、ペナルティがあります。

これはかなり先進的な話題です。Richterで読んでみることをお勧めします(他の書籍も利用可能です)。

関連する問題