「Improving Launch Performance for Your Desktop Applications」 より。
MPGO という技術が解説されています。
上の記事ではかなり長文で詳細に説明されてますから、ここでは要点のみ。
.NET Framework のアセンブリは中に入ってるのは IL (中間コード)で、それが実行時(just in time – JIT)にコンパイルされて動きます。
ngen.exe を使って事前にコンパイルしておけば、実行時にコンパイルするオーバーヘッドがなくなるので起動などが速くなります。インストール時にインストーラによって ngen.exe が実行されるようにしておくというような感じで使われます。.NET Framework の System.DLL などは事前に ngen されています。
これがさらに managed profile guided optimization (MPGO)を使うと高速化できるそうです。
MPGO はコンパイル後のネイティブイメージがより効率良く読み込めるように配置してやる(キャッシュのヒット率が良くなるようにとかディスクアクセスが少なくなるようにとか)ことによって起動を高速化する技術だそうです。こういう技術ですので、それなりに大きなアプリでないとあまり効果は無いと思います。
また、これをするには事前に「トレーニング」が必要です。トレーニングというのは、実際にアプリを操作してそのときのコードの使われ方を記録するっていう操作です。なのでうまいことトレーニングしておかないと逆効果になってしまうようなこともあるんじゃないかと思います。
トレーニングするためのツール(mpgo.exe)は Visual Studio 11 Ultimate Beta に付いているそうです。
また、.NET Framework 4.5 に付いている ngen.exe は MPGO に対応しているそうなので、これを使ってトレーニング済みのアセンブリを ngen してやれば MPGO 済みのイメージとなるそうです。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。