JIT以前のコンパイル(ngen.exe)の利点を知りたい。 Native Image Generator (NGen)プロセスの役割は何ですか?なぜそれが必要なのですか?
例を挙げてください。
.NETプラットフォームでコードを実行するには、 Common Intermediate Language (CIL)表現をマシンコードに変換する必要があります。これが実行の直前に発生する場合、これはJIT(Just In Time)コンパイルと呼ばれます。 JITの出力は永続化されないため、管理対象アプリケーションは起動するたびにJITを経由する必要があります。
または、プリコンパイルを使用して、JITコンパイルに関連する起動オーバーヘッドを減らすことができます。 NGenはプリコンパイルを実行し、ネイティブイメージをネイティブイメージキャッシュに保持します。その後、アプリケーションはネイティブイメージで実行でき、JITコンパイルのオーバーヘッドが減少するため、起動時間が短縮される場合があります。当初、NGenはインストール時のテクノロジーでした。開発者はアプリケーションインストーラーにNGenコマンドを発行させて、インストール時にプリコンパイルをトリガーしました。詳細については、NGenが強力な新機能でパフォーマンスを向上させるをご覧ください。この記事では、NGenを活用するサンプルアプリケーションを紹介します。
Windows 8(.NET 4.5)では、新しいNGenモード「Auto NGen」が導入されました。基本的に、.NETランタイムは管理対象アプリケーションの使用状況ログを生成します。システムがアイドル状態の場合、自動メンテナンスタスクがバックグラウンドで実行され、ネイティブイメージが生成されます。これにより、開発者はNGenを明示的に扱う必要がなくなります。この機能は、ウィンドウストアをターゲットにするか、 [〜#〜] gac [〜#〜] を使用する.NET 4.5+アプリケーションでのみ有効になることに注意してください。こちらが役立つ可能性のあるMSDNページです:Creating Native Images
そして、これはNGenおよび関連技術の高レベルの概要です:速度の必要性を得ましたか? .NETアプリケーションの起動が速くなります
最後に、.NETフレームワークライブラリ自体はNGenを使用してパフォーマンスを向上させています。 .NET Frameworkがサービスされると、一部のネイティブイメージが無効になります。次に、NGenを実行して、無効なネイティブイメージを再生成する必要があります。これは、アイドル時に実行される.NETランタイム最適化サービスを介して自動的に行われます。
.NETコンパイラがC#またはVB.NETコードをコンパイルすると、半分コンパイルされて [〜#〜] cil [〜#〜] コードが作成されます。この半分コンパイルされた.NET EXEファイルを実行すると、JITがバックグラウンドで実行され、半分のCILコードが完全なマシン言語にコンパイルされます。このモードは通常のJITと呼ばれます。
完全にコンパイルされたEXEファイルを実行することにより、ランタイムコンパイルが不要であると逆に言うこともできます。このコンパイルは、negen.exeを使用して行われます。このシナリオでは、JITは実行時に参加しません。これはpre-JITモードと呼ばれます。
それらがパフォーマンスにどのように影響するかを確認したい場合は、通常のJITおよびJIT前のコンパイルモードを示すこのYouTubeビデオを見ることができます。
ネイティブイメージジェネレーター(Ngen.exe)は、管理対象アプリケーションのパフォーマンスを向上させるツールです。 Ngen.exeは、ネイティブイメージ(コンパイルされたプロセッサ固有のマシンコードを含むファイル)を作成し、ローカルコンピューターのネイティブイメージキャッシュにインストールします。ランタイムは、ジャストインタイム(JIT)コンパイラーを使用する代わりに、キャッシュからのネイティブイメージを使用して、元のアセンブリをコンパイルできます。
ソフトウェアの起動が速くなるように、以前はインストール中にNGENを使用しました。
NGen (ネイティブイメージジェネレーター)は基本的に.NETバイトコード( [〜#〜] cil [〜#〜] )を実行しているコンピューターのネイティブコードにコンパイルします。利点は、コードを毎回ネイティブにコンパイルするのではなく、それを実行するか必要とするのではなく、一度だけ実行することで、アプリケーションの起動と実行が速くなることです。より多くの情報が必要な場合は、JITとAhead of Time Compilationの利点(NGenが行うこと)に関するリソースが豊富にあります。