2006年12月18日

AppDomain

  
アプリケーション ドメインとは、プロセスとスレッドのちょうど中間に位置し、プロセス内に作成される分離された環境です。これにより、一つのプロセス内で複数の「アプリケーション」を動作させることが可能になります。
プロセス内で、複数のスレッドを動作させた場合、一つのスレッドでエラーが発生すると、プロセス全体に悪影響を及ぼす危険があります。
一方、複数のプロセスを起動した場合、堅牢性は確保ででますが、パフォーマンスが犠牲になります。また、複数のプロセス間でのデータのやり取りも煩雑になり、プログラミングが難しくなります。
.NET で導入されたアプリケーションドメインを使うことで、パフォーマンスを犠牲にすることなく、堅牢性を確保することができます。
また、64Bit OSで動作させれば、1プロセス2GBという制限がなくなるため、一つのプロセス内で、たくさんのアプリケーションを動作させることが可能になります。


.NETでアプリケーションドメインを利用するには、AppDomainクラスを使います。
利用方法を、以下に示します。

// AppDomainの作成
AppDomain domain = AppDomain.CreateDomain("AnotherDomain");

// 利用するインスタンスの作成
ObjectHandle obj = domain.CreateInstance("AnotherAssembly",
                "Gushwells.MyType");
MyType testObj = (MyType)obj.Unwrap();

// インスタンスの機能の呼び出し
string s = testObj.Hello();

// アンロード
AppDomain.Unload(domain);

この例は、同期呼び出しの例になります。スレッドと同様に、並行動作させるには、呼び出された子ドメイン側で、スレッドを起動する必要があります。


この記事へのコメント
AppDomain が「プロセスとスレッドの中間」という表現はどうも違うんじゃないかと。。。
Posted by 渋木宏明(ひどり) at 2006年12月21日 13:25
いつもありがとうございます。
そうでうね。メリット、デメリットがその中間ということを言いたかったのですが、この表現だと、「アプリケーションドメイン」の定義と読めてしまって、的を得ていないですね。
スレッドは実行単位だけど、アプリケーションドメインは、マネージドコードの実行環境?なので、同列に扱うのは変ですね。
Posted by Gushwell at 2006年12月21日 22:31
アプドメインはセキュリティ管理のための境界です。
実は「実行の管理」にはあまり関係ありません。
その証拠に、アプドメイン間でスレッドを共有することもできてしまいます。

Posted by 渋木宏明(ひどり) at 2006年12月22日 11:06
セキュリティ管理のための境界ですね、覚えておきます。

「スレッドはアプリケーション ドメイン境界を自由に越えることができ」とMSDNに書いてありますね。
具体的なコードで確かめないとちょっとピンと来ないですね。


Posted by Gushwell at 2006年12月22日 17:44
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50667194