累計
本日
昨日

起動時間を短縮する方法

.NETの実行ファイル(アセンブリ)は、起動時に時間がかかる場合がある。これは、.NETの実行ファイルが中間コードというもので最終的な実行ファイルではないためである。起動時間がかかる原因は、中間コードをコンパイルしているためである。
コンパイルが実行されるのは、1回目の起動時のみなので、通常は1回目に比べて2回目に起動時間はずっと早くなっているはずだ。

この1回目の起動時間を短縮する方法をご紹介する。
やり方は3つあるが、Windowsアプリケーションの場合は、案2、案3が現実的に使える案であると筆者は考える。

案1 ngenによる事前コンパイル
MSDNライブラリにも載っている方法で、あらかじめ実行環境用にコンパイルしておく方法である。
コンパイラーは、CPUの種類、OSのバージョン、.NET Frameworkのバージョンの組み合わせでもっともパフォーマンスがよい実行ファイルを生成する。非常に賢いコンパイラーなのだが、クライアントPCにアプリケーションを配布する場合はやっかいだ。クライアントの台数が多い場合、クライアントごとに3つの組み合わせ内容を把握し、適切なコンパイル済み実行ファイルを配布するのは、運用上困難であると推察する。(実行にはオリジナルのアセンブリも必要らしい。)

ngenによる事前コンパイルは、ASP.NETのサーバサイドアプリケーションのように実行環境が変化しない場合は有効であると考える。

案2 スプラッシュウィンドウを使う
スプラッシュウィンドウとは、WORDやEXCELの起動時に表示されるようなタイトルの画面である。スプラッシュウィンドウを起動時に表示させて、バックグラウンドで一部の処理を行うということができる。この方法は、タイトル画面を表示させることで、ユーザのイライラ感をごまかしているだけで、実際には起動時間は全く短縮されていないことを付け加えておく。
スプラッシュウィンドウの表示方法は、DOBON.NETさんのサイトが参考になる。


案3 マルチスレッド化する
案2でも不十分なケースで使う方法である。通常、スプラッシュウィンドウはアプリケーションの最初に動作する部分に記述するが、それでもスプラッシュウィンドウ自身が表示されるまでの時間が長くて、トータルの起動時間がかかる場合がる。原因は、起動時の処理(ファイルの読み込み、初期化、モジュールのロードetc)が多いためと予測する。案3は必要最低限のものだけ起動時に処理し、一部をバックグランド処理で行うものである。

たとえば、起動時はまず必要最低限の初期化処理を行ってログイン画面を表示し、表示後バックグラウンドで残りの初期化処理(マスターデータ読み込みなど)を行うのである。ユーザにはログイン画面しか表示されていないので、バックグランドで処理が動いていることには気づかない。

マルチスレッドの方法はいくつかあるが、筆者はデリゲートによるマルチスレッドを使った。筆者はこの策を実践し、現場でうまくいった。


トラックバック

トラックバックURL:
http://www.apricot-jp.com/cgi/mt/mt-tb.cgi/267

関連情報

Copyright(C) 2007 アーキテクト360 Allrights reserved.