10

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

4

5 に答える 5

15

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

たとえば、SQL Server はAppDomains を使用して、そのプロセスで CLR アセンブリを安全に読み込みます。

于 2009-04-22T09:24:30.997 に答える
3

AppDomain を使用しない場合にサード パーティのアセンブリがクラッシュを引き起こすことについて読んだことがあります

別のアプリ ドメインに他のアセンブリを読み込むことについて話していると思います。そうすれば、それらをアドレス空間から分離して、影響を受けるコードのクラッシュを防ぐことができます。代償として、別のアプリ ドメイン内のアセンブリとの通信はより難しくなり、すべての呼び出しをアプリ ドメインの境界を越えて処理する必要があるため、パフォーマンスが低下します。

これはかなり高度なトピックです。Richter を読むことをお勧めします(他の本も入手可能です)。

于 2009-04-22T09:32:00.980 に答える
2

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

サード パーティのアセンブリに関する注記の意味がわかりません。

于 2009-04-22T09:24:19.937 に答える
1

アプリケーションが読み込まれる既定のアプリ ドメインがあります (すべてのインスタンスが独自のものを取得します)。

クラッシュとは、別のアプリ ドメインにロードしないと、サード パーティのアセンブリ (プラグインなど) がクラッシュしたときにアプリケーション全体がクラッシュすることを意味します。したがって、プラグインを別のアプリ ドメインにロードすることをお勧めします。アプリ ドメインでのクラッシュは、そのアプリ ドメインのみをクラッシュさせ、他のドメインはクラッシュさせないためです。CLR アドイン ブログには、これに関する投稿がいくつかあります。

注意すべき重要なことは、アプリ ドメインは必ずしも同じプロセスまたは同じシステム上にある必要はないということです。したがって、基本的にはリモート処理に必要です。

于 2009-04-22T09:28:44.967 に答える
1

好きなだけ作成できるプログラムごとに少なくとも 1 つの appdomain がありますが、複数必要になることはめったにありません。

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

于 2009-04-22T09:26:34.223 に答える