NGenを使用して、.NETアプリケーションのネイティブのプリコンパイル済みイメージを作成できることを認識しています。
しかし、アプリケーションがJITで費やした時間をどのように測定しますか?どのプロファイリングツールがこれを測定しますか?そうする無料のツールはありますか?これを行う前に、どれだけの時間を節約できるか知りたいのですが。
残念ながら、取得できる「JITの絶対時間」統計はありません。CLRは、定期的に更新される「%Time in Jit」パフォーマンスカウンターを公開しますが、サンプリングすることを選択した場合と同じくらい正確です。
このパフォーマンスカウンターには、WindowsパフォーマンスモニターツールまたはRedGateのANTSプロファイラーなどのツールを使用して非常に簡単にアクセスできます。これが私が最初に触れた方法です。プログラムでアクセスする必要がある場合は、WMIまたは.NETPerformanceCounterクラスを使用できます。
JITの影響の測定に関するこの記事は非常に役に立ちました。基本的に、ウォームスタートアップシナリオにはNGenを使用します。コールドスタートアップ時間は通常、DLLをメモリにロードすることによって支配されます。JITコンパイルは、ウォームスタートアップにはるかに大きな影響を与えます。
xperfのインストール方法については、ちょっとあいまいです。基本的には、Windows 7 .NET 4 SDKをダウンロードして、パフォーマンスツールキットを選択してください。次に、管理者としてVS 2010コマンドプロンプトを開き、プロファイリングするプログラムのディレクトリに移動して、記事のコマンドに従います。
その基本的な要点は、xperfキャプチャを使用すると、プロセスにドリルダウンして、clrjit.dllで費やされた時間を確認できることです。私の場合、CPU時間の30%がウォームスタートアップに費やされました。