Ngen.exe (ネイティブ イメージ ジェネレーター)Ngen.exe (Native Image Generator)

ネイティブ イメージ ジェネレーター (Ngen.exe) は、マネージド アプリケーションのパフォーマンスを向上するツールです。The Native Image Generator (Ngen.exe) is a tool that improves the performance of managed applications. Ngen.exe は、コンパイルされたプロセッサ固有のマシン コードを含むファイルであるネイティブ イメージを作成してローカル コンピューターのネイティブ イメージ キャッシュにインストールします。Ngen.exe creates native images, which are files containing compiled processor-specific machine code, and installs them into the native image cache on the local computer. ランタイムは、Just-In-Time (JIT) コンパイラを使用してオリジナルのアセンブリをコンパイルする代わりに、キャッシュにあるネイティブ イメージを使用できます。The runtime can use native images from the cache instead of using the just-in-time (JIT) compiler to compile the original assembly.

.NET Framework 4.NET Framework 4 では、次の変更が Ngen.exe に加えられました。Changes to Ngen.exe in the .NET Framework 4.NET Framework 4:

  • Ngen.exe によるアセンブリのコンパイルが完全信頼で行われるようになり、コード アクセス セキュリティ (CAS: Code Access Security) ポリシーが評価されなくなりました。Ngen.exe now compiles assemblies with full trust, and code access security (CAS) policy is no longer evaluated.

  • Ngen.exe で生成されたネイティブ イメージを、部分信頼で実行されているアプリケーションに読み込むことができなくなりました。Native images that are generated with Ngen.exe can no longer be loaded into applications that are running in partial trust.

.NET Framework Version 2.0 では、次の変更が Ngen.exe に加えられました。Changes to Ngen.exe in the .NET Framework version 2.0:

  • アセンブリと共にその依存関係もインストールされることで、Ngen.exe の構文が簡略化されました。Installing an assembly also installs its dependencies, simplifying the syntax of Ngen.exe.

  • ネイティブ イメージをアプリケーション ドメイン間で共有できるようになりました。Native images can now be shared across application domains.

  • 新しいアクションの update は、無効になっていたイメージを再作成します。A new action, update, re-creates images that have been invalidated.

  • アクションの実行は、コンピューターのアイドル時間を使用してイメージを生成してインストールするサービスによって遅らせることができます。Actions can be deferred for execution by a service that uses idle time on the computer to generate and install images.

  • イメージを無効化する原因の一部が解決されました。Some causes of image invalidation have been eliminated.

Windows 8 の場合、「ネイティブ イメージ タスク」を参照してください。On Windows 8, see Native Image Task.

Ngen.exe とネイティブ イメージ サービスの使用に関する追加情報については、「ネイティブ イメージ サービス」を参照してください。For additional information on using Ngen.exe and the native image service, see Native Image Service.

注意

.NET Framework バージョン 1.0 とバージョン 1.1 の Ngen.exe 構文は、「ネイティブ イメージ ジェネレーター (Ngen.exe) のレガシ構文」に記されています。Ngen.exe syntax for versions 1.0 and 1.1 of the .NET Framework can be found in Native Image Generator (Ngen.exe) Legacy Syntax.

このツールは、Visual Studio と共に自動的にインストールされます。This tool is automatically installed with Visual Studio. このツールを実行するには、開発者コマンド プロンプト (または、Windows 7 の Visual Studio コマンド プロンプト) を使用します。To run the tool, use the Developer Command Prompt (or the Visual Studio Command Prompt in Windows 7). 詳細については、「Visual Studio 用開発者コマンド プロンプト」を参照してください。For more information, see Command Prompts.

コマンド プロンプトに次のように入力します。At the command prompt, type the following:

構文Syntax

ngen action [options]  
ngen /? | /help  

アクションActions

action の構文を示す表を次に示します。The following table shows the syntax of each action. action の各部分の説明については、「引数」、「優先順位」、「シナリオ」、および「構成」の各表を参照してください。For descriptions of the individual parts of an action, see the Arguments, Priority Levels, Scenarios, and Config tables. options およびヘルプ スイッチについては、「オプション」の表を参照してください。The Options table describes the options and the help switches.

アクションAction 説明Description
install [assemblyName | assemblyPath] [scenarios] [config] [/queue[:{1|2|3}]]install [assemblyName | assemblyPath] [scenarios] [config] [/queue[:{1|2|3}]] アセンブリおよびそれに依存する項目のネイティブ イメージを生成してネイティブ イメージ キャッシュにインストールします。Generate native images for an assembly and its dependencies and install the images in the native image cache.

/queue を指定すると、アクションはネイティブ イメージ サービスのキューに置かれます。If /queue is specified, the action is queued for the native image service. 既定の優先順位は 3 です。The default priority is 3. 優先順位」の表を参照してください。See the Priority Levels table.
uninstall [assemblyName | assemblyPath] [scenarios] [config]uninstall [assemblyName | assemblyPath] [scenarios] [config] アセンブリのネイティブ イメージとその依存関係をネイティブ イメージ キャッシュから削除します。Delete the native images of an assembly and its dependencies from the native image cache.

単一のイメージとその依存関係をアンインストールするには、そのイメージをインストールしたときと同じコマンド ライン引数を使用します。To uninstall a single image and its dependencies, use the same command-line arguments that were used to install the image. メモ: .NET Framework 4.NET Framework 4 以降では、アクション uninstall * はサポートされなくなりました。Note: Starting with the .NET Framework 4.NET Framework 4, the action uninstall * is no longer supported.
update [/queue]update [/queue] 無効になったネイティブ イメージを更新します。Update native images that have become invalid.

/queue を指定すると、更新はネイティブ イメージ サービスのキューに置かれます。If /queue is specified, the updates are queued for the native image service. 更新は常に優先順位 3 でスケジュールされるため、コンピューターがアイドル状態のときに実行されます。Updates are always scheduled at priority 3, so they run when the computer is idle.
display [assemblyName | assemblyPath]display [assemblyName | assemblyPath] アセンブリのネイティブ イメージとその依存関係の状態を表示します。Display the state of the native images for an assembly and its dependencies.

引数を指定しなければ、ネイティブ イメージ キャッシュのすべての内容が表示されます。If no argument is supplied, everything in the native image cache is displayed.
executeQueuedItems [1|2|3]executeQueuedItems [1|2|3]

- または --or-

eqi [1|2|3]eqi [1|2|3]
キューに置かれているコンパイル ジョブを実行します。Execute queued compilation jobs.

優先順位を指定すると、優先順位が高いかまたは同じコンパイル ジョブが実行されます。If a priority is specified, compilation jobs with greater or equal priority are executed. 優先順位を指定しなければ、キューに置かれているすべてのコンパイル ジョブが実行されます。If no priority is specified, all queued compilation jobs are executed.
queue {pause | continue | status}queue {pause | continue | status} ネイティブ イメージ サービスを一時停止するか、停止しているサービスを再開するか、またはサービスの状態を照会します。Pause the native image service, allow the paused service to continue, or query the status of the service.

引数Arguments

引数Argument 説明Description
assemblyName アセンブリの完全な表示名。The full display name of the assembly. たとえば、"myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5" のようにします。For example, "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5". メモ: display アクションおよび uninstall アクションに対しては、myAssembly などのように部分的なアセンブリ名を指定できます。Note: You can supply a partial assembly name, such as myAssembly, for the display and uninstall actions.

Ngen.exe の各コマンド ラインに指定できるアセンブリは 1 つだけです。Only one assembly can be specified per Ngen.exe command line.
assemblyPath アセンブリの明示的なパスを返します。The explicit path of the assembly. フル パスまたは相対パスを指定できます。You can specify a full or relative path.

パスを指定せずにファイル名を指定する場合、アセンブリは現在のディレクトリに存在する必要があります。If you specify a file name without a path, the assembly must be located in the current directory.

Ngen.exe の各コマンド ラインに指定できるアセンブリは 1 つだけです。Only one assembly can be specified per Ngen.exe command line.

優先順位Priority Levels

優先度Priority 説明Description
1 ネイティブ イメージが生成され、アイドル時間まで待たずに直ちにインストールされます。Native images are generated and installed immediately, without waiting for idle time.
2 ネイティブ イメージが生成され、アイドル時間まで待たずにインストールされますが、優先順位 1 のすべてのアクション (およびその依存関係) が完了した後にインストールされます。Native images are generated and installed without waiting for idle time, but after all priority 1 actions (and their dependencies) have completed.
3 コンピューターがアイドル状態になったことをネイティブ イメージ サービスが検出するとネイティブ イメージがインストールされます。Native images are installed when the native image service detects that the computer is idle. ネイティブ イメージ サービス」を参照してください。See Native Image Service.

シナリオScenarios

シナリオScenario 説明Description
/Debug デバッガーで使用できるネイティブ イメージを生成します。Generate native images that can be used under a debugger.
/Profile プロファイラーで使用できるネイティブ イメージを生成します。Generate native images that can be used under a profiler.
/NoDependencies 指定されたシナリオのオプションに必要なネイティブ イメージの最小数を生成します。Generate the minimum number of native images required by the specified scenario options.

構成Config

構成Configuration 説明Description
/ExeConfig: exePath/ExeConfig: exePath 指定された実行可能アセンブリの構成を使用します。Use the configuration of the specified executable assembly.

Ngen.exe は、依存関係にバインドする際に、ローダーと同じ決定をする必要があります。Ngen.exe needs to make the same decisions as the loader when binding to dependencies. Load メソッドを使用して共有コンポーネントが実行時に読み込まれると、読み込まれた依存関係のバージョンなどの共有コンポーネント用に読み込まれた依存関係はアプリケーションの構成ファイルによって決定されます。When a shared component is loaded at run time, using the Load method, the application's configuration file determines the dependencies that are loaded for the shared component — for example, the version of a dependency that is loaded. /ExeConfig スイッチは、実行時にどの依存関係を読み込むかに関するガイダンスを Ngen.exe に提供します。The /ExeConfig switch gives Ngen.exe guidance on which dependencies would be loaded at run time.
/AppBase: directoryPath/AppBase: directoryPath 依存関係を検索するときは、アプリケーション ベースに指定されているディレクトリを使用します。When locating dependencies, use the specified directory as the application base.

オプションOptions

オプションOption 説明Description
/nologo Microsoft 著作権情報を表示しません。Suppress the Microsoft startup banner display.
/silent 成功メッセージを表示しません。Suppress the display of success messages.
/verbose デバッグの詳細情報を表示します。Display detailed information for debugging. メモ: オペレーティング システムの制限により、Windows 98 と Windows Millennium Edition では追加情報は表示されません。Note: Due to operating system limitations, this option does not display as much additional information on Windows 98 and Windows Millennium Edition.
/help, /?/help, /? 現在のリリースのコマンド構文とオプションを表示します。Display command syntax and options for the current release.

コメントRemarks

Ngen.exe を実行するには、管理特権が必要です。To run Ngen.exe, you must have administrative privileges.

注意事項

完全に信頼されていないアセンブリで Ngen.exe を実行しないでください。Do not run Ngen.exe on assemblies that are not fully trusted. .NET Framework 4.NET Framework 4 以降では、Ngen.exe によるアセンブリのコンパイルが完全信頼で行われるようになり、コード アクセス セキュリティ (CAS) ポリシーが評価されなくなりました。Starting with the .NET Framework 4.NET Framework 4, Ngen.exe compiles assemblies with full trust, and code access security (CAS) policy is no longer evaluated.

.NET Framework 4.NET Framework 4 以降では、Ngen.exe で生成されたネイティブ イメージを、部分信頼で実行されているアプリケーションに読み込むことができなくなりました。Starting with the .NET Framework 4.NET Framework 4, the native images that are generated with Ngen.exe can no longer be loaded into applications that are running in partial trust. 代わりに、Just-In-Time (JIT) コンパイラが呼び出されます。Instead, the just-in-time (JIT) compiler is invoked.

Ngen.exe は、install アクションへの assemblyname 引数で指定されたアセンブリおよびそのすべての依存項目のネイティブ イメージを生成します。Ngen.exe generates native images for the assembly specified by the assemblyname argument to the install action and all its dependencies. 依存関係は、アセンブリ マニフェストを参照して決定されます。Dependencies are determined from references in the assembly manifest. 依存関係を別個にインストールする必要があるのは、アプリケーションがリフレクションを使用して依存関係を読み込む場合だけです。たとえば Assembly.Load メソッドを呼び出して依存関係を読み込む場合などです。The only scenario in which you need to install a dependency separately is when the application loads it using reflection, for example by calling the Assembly.Load method.

重要

ネイティブ イメージに Assembly.LoadFrom メソッドは使用しないでください。Do not use the Assembly.LoadFrom method with native images. 実行コンテキストの他のアセンブリは、このメソッドを使用して読み込まれるイメージを使用できません。An image loaded with this method cannot be used by other assemblies in the execution context.

Ngen.exe は依存関係のカウントを保持します。Ngen.exe maintains a count on dependencies. たとえば、MyAssembly.exeYourAssembly.exe がネイティブ イメージ キャッシュにインストールされており、この両方とも OurDependency.dll を参照するとします。For example, suppose MyAssembly.exe and YourAssembly.exe are both installed in the native image cache, and both have references to OurDependency.dll. MyAssembly.exe がアンインストールされても、OurDependency.dll はアンインストールされません。If MyAssembly.exe is uninstalled, OurDependency.dll is not uninstalled. これが削除されるのは、YourAssembly.exe もアンインストールされた場合だけです。It is only removed when YourAssembly.exe is also uninstalled.

アセンブリのネイティブ イメージをグローバル アセンブリ キャッシュに生成している場合は表示名を指定します。If you are generating a native image for an assembly in the global assembly cache, specify its display name. 以下を参照してください。Assembly.FullNameSee Assembly.FullName.

Ngen.exe が生成するネイティブ イメージは、アプリケーション ドメイン間で共有できます。The native images that Ngen.exe generates can be shared across application domains. つまり、アプリケーション ドメイン間でアセンブリを共有する必要のあるアプリケーション シナリオでは Ngen.exe を使用できます。This means you can use Ngen.exe in application scenarios that require assemblies to be shared across application domains. ドメイン中立性は、次の手順で指定します。To specify domain neutrality:

複数のアプリケーション ドメインに同じアセンブリを読み込むときは、必ずドメイン中立のコードを使用します。Always use domain-neutral code when loading the same assembly into multiple application domains. 共有ドメインに読み込んだ後に非共有アプリケーション ドメインに読み込んだネイティブ イメージは使用できません。If a native image is loaded into a nonshared application domain after having been loaded into a shared domain, it cannot be used.

注意

ドメイン中立コードはアンロードできません。また、特に静的メンバーにアクセスする際にパフォーマンスがわずかに低下します。Domain-neutral code cannot be unloaded, and performance may be slightly slower, particularly when accessing static members.

「解説」セクションの内容:In this Remarks section:

別のシナリオのためのイメージの生成Generating images for different scenarios

アセンブリのネイティブ イメージが生成された後でそのアセンブリを実行する場合、ランタイムは、常にこのネイティブ イメージを自動的に検索して使用しようとします。After you have generated a native image for an assembly, the runtime automatically attempts to locate and use this native image each time it runs the assembly. 使用シナリオによっては、複数のイメージを生成できます。Multiple images can be generated, depending on usage scenarios.

たとえば、デバッグまたはプロファイルの目的でアセンブリを実行する場合、ランタイムは、/Debug または /Profile の各オプションを指定して生成されたネイティブ イメージを検索します。For example, if you run an assembly in a debugging or profiling scenario, the runtime looks for a native image that was generated with the /Debug or /Profile options. 一致するネイティブ イメージが見つからない場合、ランタイムは標準の JIT コンパイルに戻ります。If it is unable to find a matching native image, the runtime reverts to standard JIT compilation. ネイティブ イメージをデバッグする唯一の方法は、/Debug オプションを使用してネイティブ イメージを作成することです。The only way to debug native images is to create a native image with the /Debug option.

uninstall アクションもシナリオを認識するため、すべてのシナリオまたは指定したシナリオだけをアンインストールできます。The uninstall action also recognize scenarios, so you can uninstall all scenarios or only selected scenarios.

ネイティブ イメージを使用する状況の決定Determining when to Use native images

ネイティブ イメージによって、メモリ使用の改善と起動時間の短縮の 2 つの領域においてパフォーマンスが向上します。Native images can provide performance improvements in two areas: improved memory use and reduced startup time.

注意

ネイティブ イメージのパフォーマンスは、コード、データ アクセス パターン、モジュール境界を超える呼び出しの数、他のアプリケーションによって既に読み込まれている依存関係の数などの多くの要素に依存するため分析が困難です。Performance of native images depends on a number of factors that make analysis difficult, such as code and data access patterns, how many calls are made across module boundaries, and how many dependencies have already been loaded by other applications. ネイティブ イメージがアプリケーションの利益になるかどうかを確認する唯一の方法は、主な配置シナリオにおいて慎重にパフォーマンスを測定することです。The only way to determine whether native images benefit your application is by careful performance measurements in your key deployment scenarios.

メモリ使用の改善Improved memory use

プロセス間でコードを共有する場合は、ネイティブ イメージによってメモリ使用を大いに改善できます。Native images can significantly improve memory use when code is shared between processes. ネイティブ イメージは Windows PE ファイルのため、.dll ファイルの単一のコピーを複数のプロセスで共有できます。これに対して、JIT コンパイラが生成するネイティブ コードは、プライベート メモリに格納されるため共有できません。Native images are Windows PE files, so a single copy of a .dll file can be shared by multiple processes; by contrast, native code produced by the JIT compiler is stored in private memory and cannot be shared.

ターミナル サービスで実行されるアプリケーションも、共有されたコード ページの恩恵を受けることができます。Applications that are run under terminal services can also benefit from shared code pages.

さらに、JIT コンパイラを読み込まないため、各アプリケーション インスタンスが使用する固定メモリの量も減らすことができます。In addition, not loading the JIT compiler saves a fixed amount of memory for each application instance.

アプリケーションの起動の高速化Faster application startup

Ngen.exe によってアセンブリをプリコンパイルすることにより、一部のアプリケーションの起動時間が短縮されます。Precompiling assemblies with Ngen.exe can improve the startup time for some applications. 一般に、最初のアプリケーションが起動されると、その後のアプリケーションが使用する共有コンポーネントが読み込まれるため、アプリケーションがコンポーネント アセンブリを共有している場合にアプリケーションの起動時間が短縮されます。In general, gains can be made when applications share component assemblies because after the first application has been started the shared components are already loaded for subsequent applications. アプリケーションのすべてのアセンブリをハード ディスクから読み込む必要があるコールド スタートでは、ハード ディスクのアクセス時間の影響の方が大きいため、ネイティブ イメージから受け取る恩恵はそれほど大きくありません。Cold startup, in which all the assemblies in an application must be loaded from the hard disk, does not benefit as much from native images because the hard disk access time predominates.

メイン アプリケーション アセンブリにハード バインディングされているすべてのイメージは同時に読み込む必要があるため、ハード バインディングは起動時間に影響します。Hard binding can affect startup time, because all images that are hard bound to the main application assembly must be loaded at the same time.

注意

.NET Framework 3.5 Service Pack 1.NET Framework 3.5 Service Pack 1 より前のバージョンでは、厳密な名前付きの共有コンポーネントをグローバル アセンブリ キャッシュに配置する必要があります。これは、グローバル アセンブリ キャッシュ以外に配置されている厳密な名前付きのアセンブリに対してローダーが余分な検証を行うため、起動時間は短縮されず、実質的にネイティブ イメージを使用する意味がなくなります。Before the .NET Framework 3.5 Service Pack 1.NET Framework 3.5 Service Pack 1, you should put shared, strong-named components in the global assembly cache, because the loader performs extra validation on strong-named assemblies that are not in the global assembly cache, effectively eliminating any improvement in startup time gained by using native images. .NET Framework 3.5 SP1.NET Framework 3.5 SP1 で導入された最適化により、この余分な検証は削除されました。Optimizations that were introduced in the .NET Framework 3.5 SP1.NET Framework 3.5 SP1 removed the extra validation.

使用における考慮事項のまとめSummary of usage considerations

次の一般的な考慮事項とアプリケーションの考慮事項は、アプリケーションにネイティブ イメージを使用するかどうかを評価する際に役立ちます。The following general considerations and application considerations may assist you in deciding whether to undertake the effort of evaluating native images for your application:

  • ネイティブ イメージでは、JIT コンパイル、タイプ セーフ検証などの多くの起動時アクティビティが不要なため、MSIL より読み込みが高速になります。Native images load faster than MSIL because they eliminate the need for many startup activities, such as JIT compilation and type-safety verification.

  • ネイティブ イメージでは JIT コンパイラが不要なため、必要な初期作業セットが少なくてすみます。Native images require a smaller initial working set because there is no need for the JIT compiler.

  • ネイティブ イメージによって、プロセス間でコードを共有できます。Native images enable code sharing between processes.

  • ネイティブ イメージは MSIL アセンブリよりも多くのハード ディスク容量を必要とし、生成にかなりの時間を要する場合があります。Native images require more hard disk space than MSIL assemblies and may require considerable time to generate.

  • ネイティブ イメージは保持する必要があります。Native images must be maintained.

    • 元のアセンブリまたはその依存関係のいずれかに対してサービスを提供する場合は、イメージを再生成する必要があります。Images need to be regenerated when the original assembly or one of its dependencies is serviced.

    • アプリケーションまたはシナリオごとに異なるネイティブ イメージを使用する場合、1 つのアセンブリで複数のネイティブ イメージが必要な場合があります。A single assembly may need multiple native images for use in different applications or different scenarios. たとえば、2 つのアプリケーションの構成情報で、同じ依存アセンブリに対してバインディング決定が異なる場合です。For example, the configuration information in two applications might result in different binding decisions for the same dependent assembly.

    • ネイティブ イメージは管理者が作成する必要があります。つまり Administrators グループの Windows アカウントから作成します。Native images must be generated by an administrator; that is, from a Windows account in the Administrators group.

このような一般的な考慮事項に加えて、ネイティブ イメージによってパフォーマンスが向上するかどうかを検討する場合は、アプリケーションの特性も考慮する必要があります。In addition to these general considerations, the nature of your application must be considered when determining whether native images might provide a performance benefit:

  • 多くの共有コンポーネントを使用する環境でアプリケーションを実行する場合は、ネイティブ イメージによってコンポーネントを複数のプロセスで共有できます。If your application runs in an environment that uses many shared components, native images allow the components to be shared by multiple processes.

  • アプリケーションが複数のアプリケーション ドメインを使用する場合は、ネイティブ イメージによってドメイン間でコード ページを共有できます。If your application uses multiple application domains, native images allow code pages to be shared across domains.

    注意

    .NET Framework Version 1.0 と 1.1 では、アプリケーション ドメイン間でネイティブ イメージを共有することはできません。In the .NET Framework versions 1.0 and 1.1, native images cannot be shared across application domains. Version 2.0 以降では可能です。This is not the case in version 2.0 or later.

  • アプリケーションをターミナル サーバーで実行する場合は、ネイティブ イメージによってコード ページを共有できます。If your application will be run under Terminal Server, native images allow sharing of code pages.

  • サイズの大きなアプリケーションでは、一般にネイティブ イメージにコンパイルすることでパフォーマンスが向上します。Large applications generally benefit from compilation to native images. サイズの小さなアプリケーションでは、一般にあまり有効ではありません。Small applications generally do not benefit.

  • 長時間実行するアプリケーションでは、ランタイム JIT コンパイルのパフォーマンスの方がネイティブ イメージよりも若干優れています。For long-running applications, run-time JIT compilation performs slightly better than native images. ハード バインディングによって、このパフォーマンスの違いをある程度緩和できます。(Hard binding can mitigate this performance difference to some degree.)

アセンブリのベース アドレスの重要性Importance of assembly base addresses

ネイティブ イメージは Windows PE ファイルのため、他の実行可能ファイルと同様に再ベースの問題があります。Because native images are Windows PE files, they are subject to the same rebasing issues as other executable files. ハード バインディングを使用する場合、再配置のパフォーマンス コストはさらに増大します。The performance cost of relocation is even more pronounced if hard binding is employed.

ネイティブ イメージにベース アドレスを設定するには、コンパイラの適切なオプションを使用してアセンブリのベース アドレスを設定します。To set the base address for a native image, use the appropriate option of your compiler to set the base address for the assembly. Ngen.exe は、このベース アドレスをネイティブ イメージに使用します。Ngen.exe uses this base address for the native image.

注意

ネイティブ イメージは、元になるマネージド アセンブリより大きくなります。Native images are larger than the managed assemblies from which they were created. ベース アドレスは、この大きなサイズを考慮して算出する必要があります。Base addresses must be calculated to allow for these larger sizes.

dumpbin.exe などのツールを使用すると、ネイティブ イメージの推奨ベース アドレスを表示できます。You can use a tool such as dumpbin.exe to view the preferred base address of a native image.

ハード バインディングHard binding

ハード バインディングによってスループットが向上し、ネイティブ イメージの作業セットのサイズが小さくなります。Hard binding increases throughput and reduces working set size for native images. ハード バインディングの短所は、アセンブリを読み込む際にアセンブリにハード バインディングされているすべてのイメージを読み込む必要があることです。The disadvantage of hard binding is that all the images that are hard bound to an assembly must be loaded when the assembly is loaded. これによって、大きなアプリケーションの起動時間がかなり長くなります。This can significantly increase startup time for a large application.

ハード バインディングは、すべてのアプリケーションのパフォーマンスが重要な意味を持つシナリオで読み込まれる依存関係に適しています。Hard binding is appropriate for dependencies that are loaded in all your application's performance-critical scenarios. ネイティブ イメージの使用のすべての局面において言えることですが、ハード バインディングによってアプリケーションのパフォーマンスが向上するかどうかを確認する唯一の方法は、パフォーマンスを慎重に測定することです。As with any aspect of native image use, careful performance measurements are the only way to determine whether hard binding improves your application's performance.

DependencyAttribute 属性と DefaultDependencyAttribute 属性によって、ハード バインディング ヒントを Ngen.exe に提供できます。The DependencyAttribute and DefaultDependencyAttribute attributes allow you to provide hard binding hints to Ngen.exe.

注意

この 2 つの属性は、コマンドではなく Ngen.exe へのヒントです。These attributes are hints to Ngen.exe, not commands. これらの属性を使用してもハード バインディングは保証されません。Using them does not guarantee hard binding. 属性の意味は、今後のリリースで変更される可能性があります。The meaning of these attributes may change in future releases.

依存関係のバインディング ヒントの指定Specifying a binding hint for a dependency

アセンブリに DependencyAttribute を適用して、指定された依存関係が読み込まれるかどうかを示しますApply the DependencyAttribute to an assembly to indicate the likelihood that a specified dependency will be loaded. LoadHint.Always は、ハード バインディングが適切であることを示します。Default は、依存関係の既定値を使用する必要があることを示します。Sometimes は、ハード バインディングが適切ではないことを示します。LoadHint.Always indicates that hard binding is appropriate, Default indicates that the default for the dependency should be used, and Sometimes indicates that hard binding is not appropriate.

2 つの依存関係があるアセンブリのための属性のコードを次に示します。The following code shows the attributes for an assembly that has two dependencies. 最初の依存関係 (Assembly1) はハード バインディングに適しており、2 番目 (Assembly2) は適していません。The first dependency (Assembly1) is an appropriate candidate for hard binding, and the second (Assembly2) is not.

Imports System.Runtime.CompilerServices  
<Assembly:DependencyAttribute("Assembly1", LoadHint.Always)>  
<Assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)>  
using System.Runtime.CompilerServices;  
[assembly:DependencyAttribute("Assembly1", LoadHint.Always)]  
[assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)]  
using namespace System::Runtime::CompilerServices;  
[assembly:DependencyAttribute("Assembly1", LoadHint.Always)];  
[assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)];  

アセンブリ名には、ファイル名拡張子は含めません。The assembly name does not include the file name extension. 表示名を使用できます。Display names can be used.

アセンブリの既定のバインディング ヒントの指定Specifying a default binding hint for an assembly

既定のバインディング ヒントは、依存するアプリケーションが即座に頻繁に使用するアセンブリだけに必要です。Default binding hints are only needed for assemblies that will be used immediately and frequently by any application that has a dependency on them. そのようなアセンブリには、DefaultDependencyAttribute と共に LoadHint.Always を適用して、ハード バインディングを使用することを指定します。Apply the DefaultDependencyAttribute with LoadHint.Always to such assemblies to specify that hard binding should be used.

注意

DefaultDependencyAttribute 以外の値を使用してこの属性を適用しても、この属性をまったく適用しない場合と結果は同じため、このカテゴリに属さない .dll アセンブリに LoadHint.Always を適用する理由はありません。There is no reason to apply DefaultDependencyAttribute to .dll assemblies that do not fall into this category, because applying the attribute with any value other than LoadHint.Always has the same effect as not applying the attribute at all.

Microsoft では、DefaultDependencyAttribute を使用して、mscorlib.dll などのごく一部の .NET Framework のアセンブリの既定値としてハード バインディングを指定します。Microsoft uses the DefaultDependencyAttribute to specify that hard binding is the default for a very small number of assemblies in the .NET Framework, such as mscorlib.dll.

遅延処理Deferred processing

非常に大きいアプリケーションのネイティブ イメージの生成には、かなりの時間がかかります。Generation of native images for a very large application can take considerable time. 同様に、共有コンポーネントへの変更またはコンピューター設定への変更には、多くのネイティブ イメージの更新が必要になります。Similarly, changes to a shared component or changes to computer settings might require many native images to be updated. install アクションと update アクションには /queue オプションがあり、これによって、ネイティブ イメージ サービスによる遅延実行をキューに置くことができます。The install and update actions have a /queue option that queues the operation for deferred execution by the native image service. さらに、Ngen.exe には、サービスを制御するための queue アクションと executeQueuedItems アクションがあります。In addition, Ngen.exe has queue and executeQueuedItems actions that provide some control over the service. 詳細については、「ネイティブ イメージ サービス」を参照してください。For more information, see Native Image Service.

ネイティブ イメージと JIT コンパイルNative images and JIT compilation

生成できないメソッドがアセンブリ内にある場合、Ngen.exe が生成するネイティブ イメージにそのメソッドは含まれません。If Ngen.exe encounters any methods in an assembly that it cannot generate, it excludes them from the native image. ランタイムは、このアセンブリの実行中に JIT コンパイルに戻し、ネイティブ イメージから除外されたこれらのメソッドを処理します。When the runtime executes this assembly, it reverts to JIT compilation for the methods that were not included in the native image.

さらに、アセンブリがアップグレードされた場合、または何らかの理解によってイメージが無効になった場合、ネイティブ イメージは使用されません。In addition, native images are not used if the assembly has been upgraded, or if the image has been invalidated for any reason.

無効なイメージInvalid images

Ngen.exe を使用してアセンブリのネイティブ イメージを作成する場合、出力は指定したコマンド ライン オプションおよび使用するコンピューター上の設定に依存します。When you use Ngen.exe to create a native image of an assembly, the output depends upon the command-line options that you specify and certain settings on your computer. 影響のある設定は次のとおりです。These settings include the following:

  • .NET Framework Version。The version of the .NET Framework.

  • オペレーティング システムのバージョン (Windows 9x ファミリから Windows NT ファミリに変更した場合)。The version of the operating system, if the change is from the Windows 9x family to the Windows NT family.

  • アセンブリの正確な ID (ID は再コンパイル時に変更されます)。The exact identity of the assembly (recompilation changes identity).

  • アセンブリが参照するすべてのアセンブリの正確な ID (ID は再コンパイル時に変更されます)。The exact identity of all assemblies that the assembly references (recompilation changes identity).

  • セキュリティ関連の要因。Security factors.

Ngen.exe は、ネイティブ イメージを生成するときに上記の情報を記録します。Ngen.exe records this information when it generates a native image. アセンブリが実行されると、ランタイムは、コンピューターの現在の環境と一致するオプションおよび設定を指定して生成されたネイティブ イメージを検索します。When you execute an assembly, the runtime looks for the native image generated with options and settings that match the computer's current environment. 一致するネイティブ イメージが見つからない場合、ランタイムはアセンブリを JIT コンパイルに戻します。The runtime reverts to JIT compilation of an assembly if it cannot find a matching native image. コンピューターの設定および環境が次のように変更されると、ネイティブ イメージは無効になります。The following changes to a computer's settings and environment cause native images to become invalid:

  • .NET Framework Version。The version of the .NET Framework.

    更新プログラムを .NET Framework に適用すると、Ngen.exe を使用して作成したすべてのネイティブ イメージは、無効になります。If you apply an update to the .NET Framework, all native images that you have created using Ngen.exe become invalid. したがって、.NET Framework の更新では、常に Ngen Update コマンドが実行されてすべてのネイティブ イメージが再生成されます。For this reason, all updates of the .NET Framework execute the Ngen Update command, to ensure that all native images are regenerated. .NET Framework は、インストールする .NET Framework ライブラリの新しいネイティブ イメージを自動的に作成します。The .NET Framework automatically creates new native images for the .NET Framework libraries that it installs.

  • オペレーティング システムのバージョン (Windows 9x ファミリから Windows NT ファミリに変更した場合)。The version of the operating system, if the change is from the Windows 9x family to the Windows NT family.

    たとえば、コンピューターで稼動しているオペレーティング システムのバージョンが Windows 98 から Windows XP に変更されると、ネイティブ イメージ キャッシュに格納されたすべてのネイティブ イメージは無効になります。For example, if the version of the operating system running on a computer changes from Windows 98 to Windows XP, all native images stored in the native image cache become invalid. ただし、オペレーティング システムを Windows 2000 から Windows XP に変更した場合は、イメージは無効になりません。However, if the operating system changes from Windows 2000 to Windows XP, the images are not invalidated.

  • アセンブリの正確な ID。The exact identity of the assembly.

    アセンブリを再コンパイルすると、アセンブリの対応するネイティブ イメージは無効になります。If you recompile an assembly, the assembly's corresponding native image becomes invalid.

  • アセンブリが参照するすべてのアセンブリの正確な ID。The exact identity of any assemblies the assembly references.

    マネージド アセンブリを更新する場合、そのアセンブリに直接または間接に依存するすべてのネイティブ イメージが無効になるため、これらを再生成する必要があります。If you update a managed assembly, all native images that directly or indirectly depend on that assembly become invalid and need to be regenerated. これには、通常の参照と強くバインドされた依存関係も含まれます。This includes both ordinary references and hard-bound dependencies. ソフトウェア更新プログラムを適用するときには、インストール プログラムで Ngen Update コマンドを実行して、依存するすべてのネイティブ イメージを再生成する必要があります。Whenever a software update is applied, the installation program should execute an Ngen Update command to ensure that all dependent native images are regenerated.

  • セキュリティ関連の要因。Security factors.

    アセンブリに事前に与えられていたアクセス許可を制限するマシン セキュリティ ポリシーを変更すると、そのアセンブリのコンパイル済みのネイティブ イメージが無効になることがあります。Changing machine security policy to restrict permissions previously granted to an assembly can cause a previously compiled native image for that assembly to become invalid.

    共通言語ランタイムがコード アクセス セキュリティを管理する方法と、アクセス許可を使用する方法の詳細については、「コード アクセス セキュリティ」を参照してください。For detailed information about how the common language runtime administers code access security and how to use permissions, see Code Access Security.

トラブルシューティングTroubleshooting

次のトラブルシューティングのトピックでは、アプリケーションで使用されているネイティブ イメージと使用できないネイティブ イメージ、JIT コンパイラがメソッドのコンパイルを開始するタイミングの判別、および指定されたメソッドのネイティブ イメージ コンパイルを中止する方法を示します。The following troubleshooting topics allow you to see which native images are being used and which cannot be used by your application, to determine when the JIT compiler starts to compile a method, and shows how to opt out of native image compilation of specified methods.

アセンブリ バインディング ログ ビューアーAssembly Binding Log Viewer

アプリケーションでネイティブ イメージが使用されているかどうかを確認するには、Fuslogvw.exe (アセンブリ バインディング ログ ビューアー) を使用できます。To confirm that native images are being used by your application, you can use the Fuslogvw.exe (Assembly Binding Log Viewer). バインディング ログ ビューアーのウィンドウの [ログのカテゴリ] ボックスで、[ネイティブ イメージ] をクリックします。Select Native Images in the Log Categories box on the binding log viewer window. Fuslogvw.exe は、ネイティブ イメージが拒否された理由に関する情報を提供します。Fuslogvw.exe provides information about why a native image was rejected.

JITCompilationStart マネージド デバッグ アシスタントThe JITCompilationStart managed debugging assistant

jitCompilationStart マネージド デバッグ アシスタント (MDA) を使用すると、JIT コンパイラが関数のコンパイルを開始するタイミングを判別できます。You can use the jitCompilationStart managed debugging assistant (MDA) to determine when the JIT compiler starts to compile a function.

ネイティブ イメージ生成の中止Opting out of native image generation

場合によっては、NGen.exe が特定のメソッドのネイティブ イメージを生成することが困難であったり、メソッドをネイティブ イメージにコンパイルするのではなく JIT コンパイルしたいことがあります。In some cases, NGen.exe may have difficulty generating a native image for a specific method, or you may prefer that the method be JIT compiled rather then compiled to a native image. そのような場合、System.Runtime.BypassNGenAttribute 属性を使用して、NGen.exe が特定のメソッドのネイティブ イメージを生成するのを防ぐことができます。In this case, you can use the System.Runtime.BypassNGenAttribute attribute to prevent NGen.exe from generating a native image for a particular method. この属性は、ネイティブ イメージに含めたくないコードを持つ各メソッドに個別に適用する必要があります。The attribute must be applied individually to each method whose code you do not want to include in the native image. NGen.exe はこの属性を認識し、対応するメソッドのネイティブ イメージにコードを生成しません。NGen.exe recognizes the attribute and does not generate code in the native image for the corresponding method.

ただし、BypassNGenAttribute は .NET Framework クラス ライブラリ内の型としては定義されていません。Note, however, that BypassNGenAttribute is not defined as a type in the .NET Framework Class Library. コード内で属性を使用するには、最初に次のように定義する必要があります。In order to consume the attribute in your code, you must first define it as follows:

namespace System.Runtime
{
   public class BypassNGenAttribute : Attribute 
   {
   }   
}
Namespace System.Runtime
   Public Class BypassNGenAttribute : Inherits Attribute 
   End Class   
End Namespace

この後、メソッドごとに属性を適用できるようになります。You can then apply the attribute on a per-method basis. 次の例は、ExampleClass.ToJITCompile メソッドのネイティブ イメージを生成しないようにネイティブ イメージ ジェネレーターに指示しています。The following example instructs the Native Image Generator that it should not generate a native image for the ExampleClass.ToJITCompile method.

using System;
using System.Runtime;

public class ExampleClass
{
   [BypassNGen]
   public void ToJITCompile()
   {
   }
}
Imports System.Runtime

Public Class ExampleClass
   <BypassNGen>
   Public Sub ToJITCompile()
   End Sub
End Class

使用例Examples

次のコマンドは、現在のディレクトリにある ClientApp.exe のネイティブ イメージを生成し、ネイティブ イメージ キャッシュにインストールします。The following command generates a native image for ClientApp.exe, located in the current directory, and installs the image in the native image cache. アセンブリの構成ファイルが存在する場合、Ngen.exe はその構成ファイルを使用します。If a configuration file exists for the assembly, Ngen.exe uses it. さらに、ネイティブ イメージは、ClientApp.exe が参照するあらゆる .dll ファイルに対して生成されます。In addition, native images are generated for any .dll files that ClientApp.exe references.

ngen install ClientApp.exe  

Ngen.exe によってインストールされるイメージは、ルートとも呼ばれます。An image installed with Ngen.exe is also called a root. ルートは、アプリケーションまたは共有コンポーネントです。A root can be an application or a shared component.

指定したパスにある MyAssembly.exe のネイティブ イメージを生成するコマンドを次に示します。The following command generates a native image for MyAssembly.exe with the specified path.

ngen install c:\myfiles\MyAssembly.exe  

アセンブリおよびその依存関係を検索する場合、Ngen.exe は共通言語ランタイムと同じプローブ ロジックを使用します。When locating assemblies and their dependencies, Ngen.exe uses the same probing logic used by the common language runtime. 既定では、ClientApp.exe が格納されているディレクトリがアプリケーションのベース ディレクトリとして使用され、すべてのアセンブリのプローブはこのディレクトリから始まります。By default, the directory that contains ClientApp.exe is used as the application base directory, and all assembly probing begins in this directory. この動作は、/AppBase オプションを使用してオーバーライドできます。You can override this behavior by using the /AppBase option.

注意

この動作は、アプリケーション ベースが現在のディレクトリに設定される .NET Framework Version 1.0 と 1.1 における Ngen.exe から変更されています。This is a change from Ngen.exe behavior in the .NET Framework versions 1.0 and 1.1, where the application base is set to the current directory.

アセンブリは、参照を伴わない依存関係を持つことができます。たとえば、Assembly.Load メソッドを使用して .dll ファイルを読み込む場合などです。An assembly can have a dependency without a reference, for example if it loads a .dll file by using the Assembly.Load method. アプリケーション アセンブリの構成情報と /ExeConfig オプションを使用して、このような .dll ファイルのネイティブ イメージを作成できます。You can create a native image for such a .dll file by using configuration information for the application assembly, with the /ExeConfig option. MyLib.dll, の構成情報を使用して MyApp.exe のネイティブ イメージを生成するコマンドを次に示します。The following command generates a native image for MyLib.dll, using the configuration information from MyApp.exe.

ngen install c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe  

この方法でインストールされたアセンブリは、アプリケーションと共に削除されません。Assemblies installed in this way are not removed when the application is removed.

依存関係をアンインストールするには、それをインストールしたときと同じコマンド ライン オプションを使用します。To uninstall a dependency, use the same command-line options that were used to install it. 前の例から MyLib.dll をアンインストールするコマンドを次に示します。The following command uninstalls the MyLib.dll from the previous example.

ngen uninstall c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe  

グローバル アセンブリ キャッシュにアセンブリのネイティブ イメージを作成するには、アセンブリの表示名を使用します。To create a native image for an assembly in the global assembly cache, use the display name of the assembly. 例:For example:

ngen install "ClientApp, Version=1.0.0.0, Culture=neutral,   
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"  

NGen.exe は、インストールする各シナリオに対して個別のイメージ セットを生成します。NGen.exe generates a separate set of images for each scenario you install. たとえば、次のコマンドはネイティブ イメージの通常操作用の完全なセット、デバッグ用の完全なセット、およびプロファイル用の第 3 のセットをインストールします。For example, the following commands install a complete set of native images for normal operation, another complete set for debugging, and a third for profiling:

ngen install MyApp.exe  
ngen install MyApp.exe /debug  
ngen install MyApp.exe /profile  

ネイティブ イメージ キャッシュの表示Displaying the Native Image Cache

ネイティブ イメージは、キャッシュにインストールすると、Ngen.exe を使用して表示できます。Once native images are installed in the cache, they can be displayed using Ngen.exe. ネイティブ イメージ キャッシュ内のすべてのネイティブ イメージを表示するコマンドを次に示します。The following command displays all native images in the native image cache.

ngen display  

display アクションは最初にすべてのルート アセンブリを表示し、次にコンピューター上のすべてのネイティブ イメージの一覧を表示します。The display action lists all the root assemblies first, followed by a list of all the native images on the computer.

アセンブリの情報だけを表示する場合は、アセンブリの簡易名を使用します。Use the simple name of an assembly to display information only for that assembly. 次のコマンドは、部分名 MyAssembly に一致するネイティブ イメージ キャッシュのすべてのネイティブ イメージ、その依存関係、および MyAssembly に依存するすべてのルートを表示します。The following command displays all native images in the native image cache that match the partial name MyAssembly, their dependencies, and all roots that have a dependency on MyAssembly:

ngen display MyAssembly  

共有コンポーネント アセンブリに依存するルートを知ることは、共有コンポーネントがアップグレードされた後の update アクションの影響を予測する際に役立ちます。Knowing what roots depend on a shared component assembly is useful in gauging the impact of an update action after the shared component is upgraded.

アセンブリのファイル拡張子を指定する場合は、パスを指定するか、またはアセンブリが格納されているディレクトリから Ngen.exe を実行する必要があります。If you specify an assembly's file extension, you must either specify the path or execute Ngen.exe from the directory containing the assembly:

ngen display c:\myApps\MyAssembly.exe  

ネイティブ イメージ キャッシュ内で MyAssembly という名前を持ち、バージョン 1.0.0.0 であるすべてのネイティブ イメージを表示するコマンドを次に示します。The following command displays all native images in the native image cache with the name MyAssembly and the version 1.0.0.0.

ngen display "myAssembly, version=1.0.0.0"  

イメージの更新Updating Images

一般に、共有コンポーネントがアップグレードされると、イメージが更新されます。Images are typically updated after a shared component has been upgraded. イメージまたは依存関係が変更されたすべてのネイティブ イメージを更新するには、引数なしで update アクションを使用します。To update all native images that have changed, or whose dependencies have changed, use the update action with no arguments.

ngen update  

すべてのイメージを更新するプロセスは、長くなることがあります。Updating all images can be a lengthy process. ネイティブ イメージ サービスによる更新は、/queue オプションを使用してキューに置くことができます。You can queue the updates for execution by the native image service by using the /queue option. /queue オプションとインストールの優先順位の詳細については、「ネイティブ イメージ サービス」を参照してください。For more information on the /queue option and installation priorities, see Native Image Service.

ngen update /queue  

イメージのアンインストールUninstalling Images

Ngen.exe は、共有コンポーネントに依存するすべてのアセンブリが削除された場合だけ共有コンポーネントが削除されるように依存関係の一覧を維持します。Ngen.exe maintains a list of dependencies, so that shared components are removed only when all assemblies that depend on them have been removed. また、ルートとしてインストールされた共有コンポーネントは削除されません。In addition, a shared component is not removed if it has been installed as a root.

次のコマンドは、ルートの ClientApp.exe のすべてのシナリオをアンインストールします。The following command uninstalls all scenarios for the root ClientApp.exe:

ngen uninstall ClientApp  

uninstall アクションは、特定のシナリオを削除するために使用できます。The uninstall action can be used to remove specific scenarios. 次のコマンドは、ルートの ClientApp.exe のすべてのデバッグ シナリオをアンインストールします。The following command uninstalls all debug scenarios for ClientApp.exe:

ngen uninstall ClientApp /debug  

注意

/debug シナリオをアンインストールしても、/profile/debug. の両方を含むシナリオはアンインストールされません。Uninstalling /debug scenarios does not uninstall a scenario that includes both /profile and /debug.

次のコマンドは、ClientApp.exe の特定のバージョンのすべてのシナリオをアンインストールします。The following command uninstalls all scenarios for a specific version of ClientApp.exe:

ngen uninstall "ClientApp, Version=1.0.0.0"  

次のコマンドは、"ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", のすべてのシナリオまたはアセンブリのデバッグ シナリオだけをアンインストールします。The following commands uninstall all scenarios for "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", or just the debug scenario for that assembly:

ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral,   
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"  
ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral,   
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL" /debug  

install アクションと同様に、拡張子を指定する場合は、アセンブリが格納されているディレクトリから Ngen.exe を実行するか、またはフル パスを指定する必要があります。As with the install action, supplying an extension requires either executing Ngen.exe from the directory containing the assembly or specifying a full path.

ネイティブ イメージ サービスに関連する例については、「ネイティブ イメージ サービス」を参照してください。For examples relating to the native image service, see Native Image Service.

ネイティブ イメージ タスクNative Image Task

ネイティブ イメージ タスクは、ネイティブ イメージを生成および保持する Windows タスクです。The native image task is a Windows task that generates and maintains native images. ネイティブ イメージ タスクは、サポートされるシナリオでネイティブ イメージを自動的に生成し、解放します。The native image task generates and reclaims native images automatically for supported scenarios. (「ネイティブ イメージの作成」を参照してください)。また、インストーラーが、Ngen.exe (ネイティブ イメージ ジェネレーター) を使用して、遅延時にネイティブ イメージを生成および更新できるようにします。(See Creating Native Images.) It also enables installers to use Ngen.exe (Native Image Generator) to create and update native images at a deferred time.

各アーキテクチャを対象とするアプリケーションのコンパイルを許可するために、ネイティブ イメージ タスクはコンピューターでサポートされる CPU アーキテクチャごとに一度登録されます。The native image task is registered once for each CPU architecture supported on a computer, to allow compilation for applications that target each architecture:

タスク名Task name 32 ビット コンピューター32-bit computer 64 ビット コンピューター64-bit computer
NET Framework NGEN v4.0.30319NET Framework NGEN v4.0.30319 [はい]Yes [はい]Yes
NET Framework NGEN v4.0.30319 64NET Framework NGEN v4.0.30319 64 ×No [はい]Yes

ネイティブ イメージ タスクは、Windows 8 以降の実行時に .NET Framework 4.5 以降のバージョンで使用できます。The native image task is is available in the .NET Framework 4.5 and later versions, when running on Windows 8 or later. Windows の以前のバージョンでは、.NET Framework はネイティブ イメージ サービスを使用します。On earlier versions of Windows, the .NET Framework uses the Native Image Service.

タスクの有効期間Task Lifetime

一般に、Windows タスク スケジューラは、毎晩、コンピューターがアイドル状態のときにネイティブ イメージ タスクを開始します。In general, the Windows Task Scheduler starts the native image task every night when the computer is idle. このタスクでは、アプリケーション インストーラーによってキューに入れられている遅延作業、遅延されているネイティブ イメージ更新要求、自動イメージ作成がないかどうかをチェックします。The task checks for any deferred work that is queued by application installers, any deferred native image update requests, and any automatic image creation. このタスクは未完了の作業項目を完了すると、停止します。The task completes outstanding work items and then shuts down. このタスクの実行中にコンピューターがアイドル状態になると、タスクは停止します。If the computer stops being idle while the task is running, the task stops.

また、ネイティブ イメージ タスクは手動で開始することもできます。その場合には、タスク スケジューラ UI を使用するか、NGen.exe を手動で呼び出します。You can also start the native image task manually through the Task Scheduler UI or through manual calls to NGen.exe. このいずれかの方法でこのタスクを開始すると、コンピューターがアイドル状態でなくなると実行を続行します。If the task is started through either of these methods, it will continue running when the computer is no longer idle. NGen.exe を使用して手動で作成されたイメージは、アプリケーション インストーラーで予測可能な動作を有効にするために優先順位が設定されます。Images created manually by using NGen.exe are prioritized to enable predictable behavior for application installers.

ネイティブ イメージ サービスNative Image Service

ネイティブ イメージ サービスは、ネイティブ イメージを生成および保持する Windows サービスです。The native image service is a Windows service that generates and maintains native images. ネイティブ イメージ サービスによって、開発者はコンピューターがアイドル状態になるまでネイティブ イメージのインストールと更新を遅延できます。The native image service allows the developer to defer the installation and update of native images to periods when the computer is idle.

通常ネイティブ イメージ サービスは、アプリケーションまたはアップデートのインストール プログラム (インストーラー) によって開始されます。Normally, the native image service is initiated by the installation program (installer) for an application or update. 優先順位 3 のアクションでは、サービスはコンピューターのアイドル時間に実行します。For priority 3 actions, the service executes during idle time on the computer. このサービスは自身の状態を保存するため、再起動を繰り返しても必要に応じて続けて実行できます。The service saves its state and is capable of continuing through multiple reboots if necessary. 複数のイメージ コンパイルをキューに配置できます。Multiple image compilations can be queued.

このサービスは、手動の Ngen.exe コマンドともやり取りします。The service also interacts with the manual Ngen.exe command. 手動で実行するコマンドは、バックグラウンド アクティビティより優先されます。Manual commands take precedence over background activity.

注意

Windows Vista では、ネイティブ イメージ サービスに表示される名前は "Microsoft.NET Framework NGEN v2.0.50727_X86" または "Microsoft.NET Framework NGEN v2.0.50727_X64" です。On Windows Vista, the name displayed for the native image service is "Microsoft.NET Framework NGEN v2.0.50727_X86" or "Microsoft.NET Framework NGEN v2.0.50727_X64". これより前のすべてのバージョンの Microsoft Windows では、名前は ".NET Runtime Optimization Service v2.0.50727_X86" または ".NET Runtime Optimization Service v2.0.50727_X64" です。On all earlier versions of Microsoft Windows, the name is ".NET Runtime Optimization Service v2.0.50727_X86" or ".NET Runtime Optimization Service v2.0.50727_X64".

遅延の操作の起動Launching Deferred Operations

インストールまたはアップグレードを開始する前に、サービスを停止する必要があります。Before beginning an installation or upgrade, pausing the service is recommended. これによって、インストーラーがファイルをコピーするか、またはアセンブリをグローバル アセンブリ キャッシュに格納している間に、サービスが実行されないようにできます。This ensures that the service does not execute while the installer is copying files or putting assemblies in the global assembly cache. 次の Ngen.exe のコマンド ラインによって、サービスを停止します。The following Ngen.exe command line pauses the service:

ngen queue pause  

すべての遅延操作がキューに置かれた後に、次のコマンドによってサービスを再開します。When all deferred operations have been queued, the following command allows the service to resume:

ngen queue continue  

新しいアプリケーションをインストールする場合または共有コンポーネントを更新する場合にネイティブ イメージの生成を遅延するには、install アクションまたは update アクションで /queue オプションを使用します。To defer native image generation when installing a new application or when updating a shared component, use the /queue option with the install or update actions. 次の Ngen.exe のコマンド ラインは、共有コンポーネントのネイティブ イメージをインストールし、影響を受けるすべてのルートの更新を実行します。The following Ngen.exe command lines install a native image for a shared component and perform an update of all roots that may have been affected:

ngen install MyComponent /queue  
ngen update /queue  

update アクションは、MyComponent を使用するネイティブ イメージだけでなく、無効になったすべてのネイティブ イメージを再作成します。The update action regenerates all native images that have been invalidated, not just those that use MyComponent.

多くのルートで構成されるアプリケーションでは、遅延されたアクションの優先順位を指定できます。If your application consists of many roots, you can control the priority of the deferred actions. 次のコマンドは、次の 3 つのルートのインストールをキューに置きます。The following commands queue the installation of three roots. Assembly1 がアイドル時間まで待たずに最初にインストールされます。Assembly1 is installed first, without waiting for idle time. Assembly2 もアイドル時間まで待たずにインストールされますが、優先順位 1 のアクションがすべてインストールされた後にインストールされます。Assembly2 is also installed without waiting for idle time, but after all priority 1 actions have completed. Assembly3 は、コンピューターがアイドル状態になったことをサービスが検出するとインストールされます。Assembly3 is installed when the service detects that the computer is idle.

ngen install Assembly1 /queue:1  
ngen install Assembly2 /queue:2  
ngen install Assembly3 /queue:3  

executeQueuedItems アクションを使用すると、キューに置かれているアクションを同時に強制的に実行できます。You can force queued actions to occur synchronously by using the executeQueuedItems action. オプションの優先順位を指定すると、このアクションは同等またはそれ以下の優先順位を持っているキュー内のアクションだけに適用されます。If you supply the optional priority, this action affects only the queued actions that have equal or lower priority. 既定の優先順位は 3 であるため、次の Ngen.exe コマンドは、キューに置かれているすべてのアクションを即座に処理し、その処理が完了するまで戻りません。The default priority is 3, so the following Ngen.exe command processes all queued actions immediately, and does not return until they are finished:

ngen executeQueuedItems  

Ngen.exe は同期コマンドを実行し、ネイティブ イメージ サービスは使用しません。Synchronous commands are executed by Ngen.exe and do not use the native image service. ネイティブ イメージ サービスの実行中に Ngen.exe を使用してアクションを実行できます。You can execute actions using Ngen.exe while the native image service is running.

サービスのシャットダウンService Shutdown

/queue オプションを組み込んだ Ngen.exe コマンドの実行によって開始されたサービスは、すべてのアクションが完了するまでバックグラウンドで実行されます。After being initiated by the execution of an Ngen.exe command that includes the /queue option, the service runs in the background until all actions have been completed. このサービスは自身の状態を保存するため、再起動を繰り返しても必要に応じて処理を継続できます。The service saves its state so that it can continue through multiple reboots if necessary. キューに待機しているアクションがないことを検出したサービスは、次回コンピューターの再起動のときに再起動されないように自身の状態をリセットしてから、シャットダウンします。When the service detects that there are no more actions queued, it resets its status so that it will not restart the next time the computer is booted, and then it shuts itself down.

クライアントとサービスとのやり取りService Interaction with Clients

.NET Framework Version 2.0 では、必ず Ngen.exe というコマンド ライン ツールを使用してネイティブ イメージ サービスとやり取りします。In the .NET Framework version 2.0, the only interaction with the native image service is through the command-line tool Ngen.exe. インストール スクリプトでコマンド ライン ツールを使用してネイティブ イメージ サービスのアクションをキューに置いたり、サービスとやり取りしたりします。Use the command-line tool in installation scripts to queue actions for the native image service and to interact with the service.

参照See Also

ツールTools
マネージド実行プロセスManaged Execution Process
ランタイムがアセンブリを検索する方法How the Runtime Locates Assemblies
Visual Studio 用開発者コマンド プロンプトCommand Prompts