1. ホーム
  2. .net

[解決済み] アプリケーションドメインがわからない

2023-07-11 06:44:51

質問

.NET にはアプリケーション ドメインという概念があり、私の理解では、アセンブリをメモリにロードするために使用することができると思われます。私はアプリケーション ドメインについていくつか調査し、また、この主題に関するいくつかの追加知識を得るために地元の書店に行きましたが、非常に少ないようです。

私が知っている Application Domains でできることは、メモリにアセンブリをロードし、好きなときにそれをアンロードできることだけです。

私が述べた Application Domains の他の機能は何ですか?スレッドは Application Domains の境界を尊重しますか。メインのアプリケーションドメイン以外の異なるアプリケーションドメインでアセンブリをロードすることで、通信のパフォーマンス以上の欠点はありますか?

アプリケーション ドメインを議論するリソースへのリンクも同様に素晴らしいでしょう。私はすでに MSDN をチェックアウトしましたが、それらについてそれほど多くの情報を持っていません。

どのように解決するのですか?

AppDomainsは、非常に軽量なプロセスとして最もよく可視化されます。

.Net プロセスごとに N 個の AppDomain を作成できますが、一般的には 1 つだけです。 AppDomain の本当の利点は、プロセス内の分離境界を提供することです。 オブジェクトは、リモーティングまたはシリアライゼーションによってのみ、AppDomainの境界を越えて互いに会話することができます。

また、プロセス内で完全に異なるセキュリティレベルで 2 つの AppDomain を実行することも可能です。 これにより、メイン アプリケーションを完全な信頼度で実行しながら、信頼されていないプラグインをはるかに低い信頼度で実行することができます。

スレッドが AppDomain を尊重するかどうかについて、イエスかノーかを空白にすることは困難です。 1 つのスレッドが N 個の異なる AppDomain にあることはあり得ます。 あるAppDomainにあるオブジェクトが別のAppDomainにあるオブジェクトにリモートコールをする場合、そのような状況が起こりえます。 スレッドは完了するためにAppDomain間を遷移する必要があります。

AppDomainの欠点は主に複雑さです。 Remotingを理解するのに少し時間がかかり、AppDomainを適切に設定することは、自明ではありません。

AppDomain に関する MSDN のドキュメントに目を通すとよいでしょう。 AppDomain にはさまざまな複雑な機能があるため、それらを説明する簡潔なチュートリアルを見つけることは困難です。 これは素晴らしい概要を提供し、質問に直接答えられない場合でも、少なくとも正しい場所を指し示すことができます。

http://msdn.microsoft.com/en-us/library/cxk374d9.aspx

このドキュメントはもう保守されていませんので、最新版はこちらを参照してください。 https://msdn.microsoft.com/en-us/library/2bh4z9hs(v=vs.110).aspx