以下、自分用のメモです。
.NET 4.5より、マルチコアJIT (Multicore JIT)という機能が追加されました。
文字通り、マルチコアな環境で並列してJITを動作させるという機能です。
- An easy solution for improving app launch performance
- .NET 4.5 におけるパフォーマンス向上の概要
- Why is Multicore JIT not “on by default” in .net 4.5?
これにより、アプリケーションのメインの処理に先行して、必要となるメソッドのJITを
済ませておくことができるということになります。上記URLの内容を読むと
bing.comでマルチコアJITに変えただけで大幅にパフォーマンスが上がったとのことです。
このマルチコアJIT機能は、ASP.NET 4.5 と Silverlight5 では
デフォルトで有効となっています。逆にデスクトップアプリケーションのほうでは
デフォルトで有効となっておらず、開発者側で手動で有効にする必要があります。
デスクトップ側で有効となっていないのは、この機能を利用する場合、プロファイリングが
必要であり、かつ、プロファイルデータを保存しておくことが必須条件だからです。
ごちゃごちゃと記述してしまいましたが、利用方法はいたって簡単です。
以下の2つのメソッドを呼び出すだけです。
ProfileOptimization.SetProfileRoot(string) ProfileOptimization.StartProfile(string)
ProfileOptimizationクラスは、Systme.Runtime名前空間に存在します。
SetProfileRootメソッドには、プロファイルデータを格納する場所を指定します。
StartProfileメソッドには、プロファイルデータが設定されるファイル名を指定します。
以下、呼び出し部分だけのサンプルです。(メモがわり)
#region MulticoreJITSamples-01 public class MulticoreJITSamples01 : IExecutable { public void Execute() { // // .NET 4.5よりマルチコアJITが搭載されている. // 文字通り、マルチコア構成の環境にて並列でJITを行う機能である。 // これにより、アプリケーションの動きに先行して、必要となるメソッドのJITが // 行われる可能性が高くなり、結果的にアプリケーションのパフォーマンスが上がるとのこと。 // // マルチコアJITは、ASP.NET 4.5とSilverlight5では // 既定で有効となっているが、デスクトップアプリケーションでは // デフォルトで有効になっていない。 // // 有効になっていない理由は、この機能を利用するためには // プロファイリング処理が必須であり、プロファイルデータを保存 // することが条件であるため。デスクトップアプリケーションでは // フレームワーク側が、プロファイルデータをどこに保存するべきなのかを // 判断できないため、手動で実行するようになっている。 // // 参考URL: // http://blogs.msdn.com/b/dotnet/archive/2012/10/18/an-easy-solution-for-improving-app-launch-performance.aspx // http://stackoverflow.com/questions/12965606/why-is-multicore-jit-not-on-by-default-in-net-4-5 // http://msdn.microsoft.com/ja-jp/magazine/hh882452.aspx // // マルチコアJITを有効にするには、System.Runtime.ProfileOptimizationクラスの // 以下のstaticメソッドを呼び出すだけである。 // ・SetProfileRoot // ・StartProfile // 上記メソッドは、アプリケーションのエントリポイントで呼び出す方がよい。 // // // マルチコアJITを有効にする. // プロファイルデータ格納場所は、アプリ実行フォルダ. // プロファイルデータのファイル名は、App.JIT.Profileとする。 // ProfileOptimization.SetProfileRoot(Environment.CurrentDirectory); ProfileOptimization.StartProfile("App.JIT.Profile"); } } #endregion
自分の環境 (4プロセッサ)で試しに、DevExpressの大きめのサンプルに
マルチコアJITを行うよう設定して実行したところ、少し起動速度や動作が速くなったかなと
感じました。やっぱり、サンプル程度のアプリでは効果はなかなかわかりませんね。
実業務レベルのアプリケーションだと、目に見えて効果が現れるかもしれません。
ただ、マルチコアJITを行っているバージョンの方が、起動時にCPU使用率が高くなりました。
4コアフルに使っている感触です。やり方もめっちゃ簡単なので、とりあえずアプリのエントリポイントで
プロファイルするよう実行しておいてもいいかもしれませんね。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場