Create  Edit  Diff  FrontPage  Index  Search  Changes  Login

The Backyard - WhatIsAppDomain Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

この記事は、「WEB+DB PRESS Vol.14」(技術評論社)に掲載していただいた記事の元原稿(必要に応じて加筆/修正/削除をしています)を公開するものです。

!AppDomainの利点

ここであらためて、ローンチャーでAppDomainを利用する利点を解説しましょう。
*クライアントPCのメモリー消費量の軽減
*起動したアプリケーションが異常終了した場合の検出が容易
*起動したアプリケーションの強制終了が容易

最初の点を除けば、Win32APIを駆使したり、独自のワトソン博士代替アプリケーションを登録することによって可能なことですが、ローンチャ自身がAppDomainを作成し、その中でアプリケーションを実行することでマネージドコードだけですべて処理できます。これは、ローンチャ自身のインストールを単純にできるというメリットでもあります。

また一見すると、スレッドを使用することで同様な処理が実現可能に見えますが、AppDomainはそれぞれが完全に独立した実行空間のため、スレッドでは実現できない以下の点も解決します。
*個々のアプリケーション毎に独立してクラス変数(スタティックフィールド)を使用可能
*同期処理がAppDomain内で完結

これらの点は、アプリケーションの開発(テストを含む)時点では、通常のスタンドアローンアプリケーションとして作成可能で、余分な考慮を行う必要がないということを意味します。

いずれにしても、スレッドで同様な処理を実装する場合に必要となる機構があらかじめAppDomainとして提供されていることは.NET Frameworkの利点です。

それではまず、第一の利点であるメモリー消費量の軽減について見てみましょう。

図:nonappdomainは、NetLauncherときわめて小さなWindows フォームアプリケーション(例外の動作確認などのために、サンプルとして同梱してあります)であるAppDomainTestを2個それぞれ起動した場合で、図:useappdomainは、NetLauncherからAppDomainTestを2個起動した場合の、タスクマネージャの表示です。(表)は、この状態をまとめたものです。ここではNetLauncherの使用メモリー量がAppDomainTestの使用メモリー量よりも大きいため差がわかりにくいですが、一般的なWindows フォームアプリケーションが大体15MBくらいのメモリー使用量なのに対し、AppDomain内では2MB程度に収まることがわかります(もちろん、実行時に多量のオブジェクトを作成すればその分増加します)。


||方法||最大メモリ使用量||スレッド数
||AppDomain内に起動||25,360K||15
||別プロセスとして起動||45,888K||17

実際に、同時に2つ以上のアプリケーションを起動することがあるかどうかは運用次第です。しかしいずれにしろローンチャと起動されるアプリケーションの最低2つは同時に実行されるため、実メモリー128MB程度の安価な企業用クライアントPCでは、別プロセスとするかAppDomainを利用するかは、大きな差となり得ます。