Microsoftで使用している経験則では、マルチコアJITを使用すると、NGENの起動パフォーマンスの約半分が得られます。したがって、アプリがNGENありで0.1秒、NGENなしで1.4秒で起動する場合、マルチコアJITの起動には約0.75秒かかると予想されます。
そうは言っても、プログラムの実行順序がMCJの有無にかかわらず同じであることを保証するために、いくつかの制限を設ける必要がありました。MCJは、モジュールがフォアグラウンドスレッドによってロードされるのを待機しているバックグラウンドスレッドを一時停止し、アセンブリ解決またはモジュール解決イベントがある場合はバックグラウンドコンパイルを中止することがあります。
あなたのケースで何が起こっているのかを知りたい場合は、MCJ機能のETW(Event Tracing For Windows)インストルメンテーションがあり、トレースを取得するとこれらのイベントを収集できるバージョンのPerfViewがまもなくリリースされますあなたのアプリのスタートアップの。
更新: PerfViewが更新され、背景のJIT情報を表示できるようになりました。最新バージョン(1.2.2.0)で診断する手順は次のとおりです。
- アプリケーション起動のPerfViewを使用して、メインのPerfViewメニューから[収集]->[実行]または[収集]->[収集]を使用してトレースを収集します。
- [収集]->[実行]を使用した場合は、[コマンド]テキストボックスに.exeの名前を入力し、ファイル名(IronScheme.etlなど)を選択し、[詳細オプション]から[バックグラウンドJIT]を選択して、[コマンドの実行]をクリックします。
- アプリケーションを閉じて、生成されるIronScheme.etlファイルをダブルクリックします。
- IronScheme.etlの下のリストにあるJITStatsビューをダブルクリックすると、ポップアップするビューに次のようなものが表示されます。
This process uses Background JIT compilation (System.Runtime.ProfileOptimize)
Methods Background JITTed : 2,951
Percent # Methods Background JITTed : 52.9%
MSec Background JITTing : 3,901
Percent Time JITTing is Background : 50.9%
Background JIT Thread : 11308
[生のバックグラウンドJit診断を表示]をクリックすると、すべてのMCJイベントをExcelで表示できます。私が尋ねるのを忘れた1つの質問:これをマルチコアマシンまたはマルチコアVMで実行していますか?論理プロセッサが1つしかないVMでMCJをテストするのはよくある間違いです。