アプリケーションの起動を高速化する「ngen.exe」
.netでFormを作ると起動がむっさ遅い。まあそれにはいろいろ事情があるのだが・・・
一応、起動や動作を高速化するためのツール、ネイティブイメージジェネレータ「nge.exe」がある。以前試したときは全然高速化されなかったのだが、再度検証することにした。むっさ遅いアプリは「DBにつないで一覧を表示して編集する」ってかんじの機能なのだが、こいつの起動に大体30秒くらいかかる。コールドスタートで30秒だが、2度目の起動では20秒程度に短縮される。まあ20秒でもいけてないわけですが、一度目の起動でも20秒程度で起動してきてほしい。
どうやら.net2.0にてngenは高機能になったようで、今まではアセンブリを指定してネイティブイメージを作成していたのが、Exeを指定したら依存関係のあるアセンブリについてもネイティブイメージを作成するようになったようだ。しかも、結構賢く動く。
たとえば、Aというアプリが依存するBコンポーネントがあって、AをngenするとAとBのネイティブイメージが作成される。ここでA'というBを使用するアプリを同じフォルダにいれてngenうるとBのイメージはすでにあるので作成されずA'のイメージのみが作成される。ここまではまあ予想できる。ここでAをアンインストールするとどうなるか?ngenは依存関係を覚えているようでAのみがアンインストールされBは残る。ここでA'をアンインストールするとA'とBがアンインストールされるという感じでなかなか賢く動いてくれるようだ。
で、ngenしてから再度テストをしてみた。
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ngen install
前回は駄目だったのだが、今回は起動が速くなってる!一度目の起動から20秒程度になった。
どうやら前回はなにかやり方を間違えていたみたい。結構効果があるのでアプリのインストール時にngenする機構を取り入れることにする。