Ngen.exe (Native Image Generator)Ngen.exe (Native Image Generator)

Native Image Generator (Ngen.exe) ist ein Tool zur Leistungsoptimierung verwalteter Anwendungen.The Native Image Generator (Ngen.exe) is a tool that improves the performance of managed applications. Mit "Ngen.exe" können Sie systemeigene Images erstellen, also Dateien mit kompiliertem prozessorspezifischem Computercode, die daraufhin im Cache für systemeigene Images auf dem lokalen Computer installiert werden.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. Die Laufzeit kann systemeigene Abbilder aus dem Cache nutzen und muss nicht den JIT (Just-In-Time)-Compiler verwenden, um die ursprüngliche Assembly zu kompilieren.The runtime can use native images from the cache instead of using the just-in-time (JIT) compiler to compile the original assembly.

Hinweis

„Ngen. exe“ kompiliert native Images für Assemblys, die nur .NET Framework als Ziel verwenden.Ngen.exe compiles native images for assemblies that target the .NET Framework only. Der äquivalente Generator für native Images für .NET Core ist CrossGen.The equivalent native image generator for .NET Core is CrossGen.

Änderungen an „Ngen.exe“ in .NET Framework 4:Changes to Ngen.exe in the .NET Framework 4:

  • Mit "Ngen.exe"können nun Assemblys mit vollständiger Vertrauenswürdigkeit kompiliert werden, und die Codezugriffssicherheitsrichtlinie (CAS) wird nicht mehr ausgewertet.Ngen.exe now compiles assemblies with full trust, and code access security (CAS) policy is no longer evaluated.

  • Systemeigene Images, die mit "Ngen.exe" generiert werden, können nicht mehr in Anwendungen geladen werden, die mit partieller Vertrauenswürdigkeit ausgeführt werden.Native images that are generated with Ngen.exe can no longer be loaded into applications that are running in partial trust.

Änderungen an "Ngen.exe" in .NET Framework Version 2.0:Changes to Ngen.exe in the .NET Framework version 2.0:

  • Mit der Installation einer Assembly werden auch ihre Abhängigkeiten installiert, und die Syntax von "Ngen.exe" wird vereinfacht.Installing an assembly also installs its dependencies, simplifying the syntax of Ngen.exe.

  • Systemeigene Images können jetzt für mehrere Anwendungsdomänen verwendet werden.Native images can now be shared across application domains.

  • Die neue Aktion update erstellt ungültig gewordene Images neu.A new action, update, re-creates images that have been invalidated.

  • Sie können Aktionen verzögern und von einem Dienst ausführen lassen, der die Leerlaufzeiten auf dem Computer nutzt, um Images zu generieren und zu installieren.Actions can be deferred for execution by a service that uses idle time on the computer to generate and install images.

  • Einige Ursachen für die Ungültigkeit von Images wurden eliminiert.Some causes of image invalidation have been eliminated.

Unter Windows 8 finden Sie weitere Informationen unter Aufgabe zur Generierung nativer Images.On Windows 8, see Native Image Task.

Weitere Informationen zur Verwendung von „Ngen.exe“ und des Diensts für native Images finden Sie unter Dienst für systemeigene Abbilder.For additional information on using Ngen.exe and the native image service, see Native Image Service.

Hinweis

Die Syntax von „Ngen.exe“ für die Versionen 1.0 und 1.1 von .NET Framework finden Sie unter Legacysyntax des Native Image Generator (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.

Dieses Tool wird automatisch mit Visual Studio installiert.This tool is automatically installed with Visual Studio. Verwenden Sie die Developer-Eingabeaufforderung für Visual Studio (oder die Visual Studio-Eingabeaufforderung in Windows 7), um das Tool auszuführen.To run the tool, use the Developer Command Prompt for Visual Studio (or the Visual Studio Command Prompt in Windows 7). Weitere Informationen finden Sie unter Eingabeaufforderungen.For more information, see Command Prompts.

Geben Sie an der Eingabeaufforderung Folgendes ein:At the command prompt, type the following:

SyntaxSyntax

ngen action [options]
ngen /? | /help

AktionenActions

In der folgenden Tabelle wird die Syntax für jede einzelne action dargestellt.The following table shows the syntax of each action. Beschreibungen der einzelnen Teile einer action finden Sie in den Tabellen Argumente, Prioritätsebenen, Szenarien und Konfigurationen.For descriptions of the individual parts of an action, see the Arguments, Priority Levels, Scenarios, and Config tables. In der Tabelle Optionen werden die options und die Hilfeschalter beschrieben.The Options table describes the options and the help switches.

AktionAction BESCHREIBUNGDescription
install [assemblyName | assemblyPath] [scenarios] [config] [/queue[:{1|2|3}]]install [assemblyName | assemblyPath] [scenarios] [config] [/queue[:{1|2|3}]] Generiert systemeigene Images für eine Assembly und ihre Abhängigkeiten und installiert die Images im Cache für systemeigene Images.Generate native images for an assembly and its dependencies and install the images in the native image cache.

Wenn /queue angegeben wird, wird die Aktion in die Warteschlange des Diensts für systemeigene Images gestellt.If /queue is specified, the action is queued for the native image service. Die Standardpriorität ist 3.The default priority is 3. Informationen hierzu finden Sie in der Tabelle Prioritätsebenen.See the Priority Levels table.
uninstall [assemblyName | assemblyPath] [scenarios] [config]uninstall [assemblyName | assemblyPath] [scenarios] [config] Löscht die systemeigenen Images einer Assembly und ihre Abhängigkeiten aus dem Cache für systemeigene Images.Delete the native images of an assembly and its dependencies from the native image cache.

Verwenden Sie zum Deinstallieren eines einzelnen Images und seiner Abhängigkeiten dieselben Befehlszeilenargumente wie beim Installieren des Images.To uninstall a single image and its dependencies, use the same command-line arguments that were used to install the image. Hinweis: Ab .NET Framework 4 wird die Aktion uninstall * nicht mehr unterstützt.Note: Starting with the .NET Framework 4, the action uninstall * is no longer supported.
update [/queue]update [/queue] Aktualisiert systemeigene Images, die ungültig geworden sind.Update native images that have become invalid.

Wenn /queue angegeben wird, werden die Aktualisierungen in die Warteschlange des Diensts für systemeigene Images gestellt.If /queue is specified, the updates are queued for the native image service. Aktualisierungen werden immer mit Priorität 3 geplant, sodass sie zu Leerlaufzeiten des Computers ausgeführt werden.Updates are always scheduled at priority 3, so they run when the computer is idle.
display [assemblyName | assemblyPath]display [assemblyName | assemblyPath] Zeigt den Zustand der systemeigenen Images für eine Assembly und ihre Abhängigkeiten an.Display the state of the native images for an assembly and its dependencies.

Wenn kein Argument angegeben wird, wird der gesamte Inhalt des Caches für native Images angezeigt.If no argument is supplied, everything in the native image cache is displayed.
executeQueuedItems [1|2|3]executeQueuedItems [1|2|3]

Oder-or-

eqi [1|2|3]eqi [1|2|3]
Führt die in der Warteschlange enthaltenen Kompilierungsaufträge aus.Execute queued compilation jobs.

Wenn eine Priorität angegeben wird, werden Kompilierungsaufträge mit höherer oder gleicher Priorität ausgeführt.If a priority is specified, compilation jobs with greater or equal priority are executed. Wenn keine Priorität angegeben wird, werden alle in die Warteschlange gestellten Kompilierungsaufträge ausgeführt.If no priority is specified, all queued compilation jobs are executed.
queue {pause | continue | status}queue {pause | continue | status} Hält den Dienst für systemeigene Images an, setzt den angehaltenen Dienst fort bzw. fragt den Dienststatus ab.Pause the native image service, allow the paused service to continue, or query the status of the service.

ArgumenteArguments

ArgumentArgument BESCHREIBUNGDescription
assemblyName Der vollständige Anzeigename der Assembly.The full display name of the assembly. Beispielsweise "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5".For example, "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5". Hinweis: Sie können einen partiellen Assemblynamen wie myAssembly für die display-Aktion und die uninstall-Aktion angeben.Note: You can supply a partial assembly name, such as myAssembly, for the display and uninstall actions.

In jeder Befehlszeile von "Ngen.exe" kann nur eine Assembly angegeben werden.Only one assembly can be specified per Ngen.exe command line.
assemblyPath Der explizite Pfad der Assembly.The explicit path of the assembly. Sie können einen vollständigen oder einen relativen Pfad angeben.You can specify a full or relative path.

Wenn Sie einen Dateinamen ohne Pfad angeben, muss sich die Assembly im aktuellen Verzeichnis befinden.If you specify a file name without a path, the assembly must be located in the current directory.

In jeder Befehlszeile von "Ngen.exe" kann nur eine Assembly angegeben werden.Only one assembly can be specified per Ngen.exe command line.

PrioritätsebenenPriority Levels

PrioritätPriority BESCHREIBUNGDescription
1 Systemeigene Images werden sofort generiert und installiert, ohne dass auf Leerlaufzeit gewartet wird.Native images are generated and installed immediately, without waiting for idle time.
2 Systemeigene Images werden ohne Warten auf Leerlaufzeit generiert und installiert, aber nachdem alle Aktionen mit Priorität 1 (und ihre Abhängigkeiten) abgeschlossen wurden.Native images are generated and installed without waiting for idle time, but after all priority 1 actions (and their dependencies) have completed.
3 Systemeigene Images werden installiert, wenn der Dienst für systemeigene Images feststellt, dass sich der Computer im Leerlauf befindet.Native images are installed when the native image service detects that the computer is idle. Weitere Informationen finden Sie unter Dienst für systemeigene Abbilder.See Native Image Service.

SzenarienScenarios

SzenarioScenario BESCHREIBUNGDescription
/Debug Generiert systemeigene Images, die unter einem Debugger verwendet werden können.Generate native images that can be used under a debugger.
/Profile Generiert systemeigene Images, die unter einem Profiler verwendet werden können.Generate native images that can be used under a profiler.
/NoDependencies Generiert die Mindestanzahl systemeigener Images, die von den angegebenen Einsatzszenarien benötigt werden.Generate the minimum number of native images required by the specified scenario options.

KonfigurationenConfig

KonfigurationConfiguration BESCHREIBUNGDescription
/ExeConfig: exePath/ExeConfig: exePath Verwendet die Konfiguration der angegebenen ausführbaren Assembly.Use the configuration of the specified executable assembly.

"Ngen.exe" muss beim Binden an Abhängigkeiten die gleichen Entscheidungen wie das Ladeprogramm treffen.Ngen.exe needs to make the same decisions as the loader when binding to dependencies. Wenn eine freigegebene Komponente zur Laufzeit mit der Load-Methode geladen wird, bestimmt die Konfigurationsdatei der Anwendung die Abhängigkeiten, die für die freigegebene Komponente geladen werden, beispielsweise die Version einer zu ladenden Abhängigkeit.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. Über den Schalter /ExeConfig erhält "Ngen.exe" Anweisungen dazu, welche Abhängigkeiten zur Laufzeit geladen werden.The /ExeConfig switch gives Ngen.exe guidance on which dependencies would be loaded at run time.
/AppBase: directoryPath/AppBase: directoryPath Verwendet das angegebene Verzeichnis beim Suchen nach Abhängigkeiten als Anwendungsbasis.When locating dependencies, use the specified directory as the application base.

OptionenOptions

OptionOption BESCHREIBUNGDescription
/nologo Unterdrückt die Anzeige des Startbanners von Microsoft.Suppress the Microsoft startup banner display.
/silent Unterdrückt die Anzeige von Erfolgsmeldungen.Suppress the display of success messages.
/verbose Zeigt ausführliche Informationen zum Debuggen an.Display detailed information for debugging. Hinweis: Aufgrund von Beschränkungen im Betriebssystem werden in Windows 98 und Windows Millennium Edition durch diese Option nicht so viele zusätzliche Informationen angezeigt.Note: Due to operating system limitations, this option does not display as much additional information on Windows 98 and Windows Millennium Edition.
/help, /?/help, /? Zeigt die Befehlssyntax sowie Optionen für das aktuelle Release an.Display command syntax and options for the current release.

AnmerkungenRemarks

Zum Ausführen von "Ngen.exe" müssen Sie über Administratorrechte verfügen.To run Ngen.exe, you must have administrative privileges.

Achtung

Führen Sie "Ngen.exe" nicht für Assemblys aus, die nicht vollständig vertrauenswürdig sind.Do not run Ngen.exe on assemblies that are not fully trusted. Ab .NET Framework 4 kompiliert „Ngen.exe“ Assemblys mit vollständiger Vertrauenswürdigkeit, und die Codezugriffssicherheitsrichtlinie (Code Access Security, CAS) wird nicht mehr ausgewertet.Starting with the .NET Framework 4, Ngen.exe compiles assemblies with full trust, and code access security (CAS) policy is no longer evaluated.

Ab .NET Framework 4 können die systemeigenen Images, die mit „Ngen.exe“ generiert werden, nicht mehr in Anwendungen geladen werden, die mit partieller Vertrauenswürdigkeit ausgeführt werden.Starting with the .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. Stattdessen wird der Just-In-Time (JIT)-Compiler aufgerufen.Instead, the just-in-time (JIT) compiler is invoked.

Mit „Ngen.exe“ werden native Images für die mit dem Argument assemblyname für die Aktion install angegebene Assembly und alle ihre Abhängigkeiten generiert.Ngen.exe generates native images for the assembly specified by the assemblyname argument to the install action and all its dependencies. Abhängigkeiten werden anhand von Verweisen im Assemblymanifest bestimmt.Dependencies are determined from references in the assembly manifest. Eine Abhängigkeit müssen Sie nur in einem Szenario separat installieren, in dem die Abhängigkeit von der Anwendung mittels Reflektion geladen wird, z. B. durch Aufrufen der Assembly.Load-Methode.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.

Wichtig

Verwenden Sie die Assembly.LoadFrom-Methode nicht für systemeigene Images.Do not use the Assembly.LoadFrom method with native images. Ein mit dieser Methode geladenes Image kann nicht von anderen Assemblys im Ausführungskontext verwendet werden.An image loaded with this method cannot be used by other assemblies in the execution context.

Ngen.exe erfasst die Anzahl von Abhängigkeiten.Ngen.exe maintains a count on dependencies. Angenommen, MyAssembly.exe und YourAssembly.exe sind im Cache für systemeigene Images installiert, und beide verfügen über Verweise auf 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. Wenn MyAssembly.exe deinstalliert wird, wird OurDependency.dll nicht deinstalliert.If MyAssembly.exe is uninstalled, OurDependency.dll is not uninstalled. Die Deinstallation erfolgt erst, wenn auch YourAssembly.exe deinstalliert wird.It is only removed when YourAssembly.exe is also uninstalled.

Wenn Sie ein systemeigenes Image für eine Assembly im globalen Assemblycache generieren, geben Sie deren Anzeigenamen an.If you are generating a native image for an assembly in the global assembly cache, specify its display name. Siehe Assembly.FullName.See Assembly.FullName.

Die mit Ngen.exe generierten systemeigenen Images können für andere Anwendungsdomänen freigegeben werden.The native images that Ngen.exe generates can be shared across application domains. Dies bedeutet, dass "Ngen.exe" in Anwendungsszenarien verwendet werden kann, in denen Assemblys von mehreren Anwendungsdomänen gemeinsam genutzt werden müssen.This means you can use Ngen.exe in application scenarios that require assemblies to be shared across application domains. So geben Sie Domänenneutralität an:To specify domain neutrality:

Verwenden Sie immer domänenneutralen Code, wenn Sie dieselbe Assembly in mehrere Anwendungsdomänen laden.Always use domain-neutral code when loading the same assembly into multiple application domains. Wenn ein systemeigenes Image in eine nicht gemeinsam genutzte Anwendungsdomäne geladen wird, nachdem es in eine gemeinsam genutzte Domäne geladen wurde, kann es nicht verwendet werden.If a native image is loaded into a nonshared application domain after having been loaded into a shared domain, it cannot be used.

Hinweis

Domänenneutraler Code kann nicht entladen werden, und die Leistung ist möglicherweise etwas vermindert, insbesondere beim Zugriff auf statische Member.Domain-neutral code cannot be unloaded, and performance may be slightly slower, particularly when accessing static members.

Inhalt im Abschnitt „Hinweise“:In this Remarks section:

Generieren von Images für verschiedene SzenarienGenerating images for different scenarios

Nachdem Sie ein natives Image für eine Assembly generiert haben, wird dieses bei jedem Ausführen der Assembly automatisch von der Laufzeit gesucht und verwendet.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. Je nach Anwendungsszenario können mehrere Images generiert werden.Multiple images can be generated, depending on usage scenarios.

Wenn Sie beispielsweise eine Assembly in einem Debugging- oder Profilerstellungsszenario ausführen, sucht die Laufzeit nach einem systemeigenen Image, das mit der Option /Debug bzw. /Profile generiert wurde.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. Wenn kein entsprechendes systemeigenes Image gefunden wurde, wird die Laufzeit auf die standardmäßige JIT-Kompilierung zurückgesetzt.If it is unable to find a matching native image, the runtime reverts to standard JIT compilation. Die einzige Möglichkeit zum Debuggen systemeigener Images besteht darin, ein systemeigenes Image mit der Option /Debug zu erstellen.The only way to debug native images is to create a native image with the /Debug option.

Die Aktion uninstall erkennt auch Szenarien, sodass Sie alle oder nur ausgewählte Szenarien deinstallieren können.The uninstall action also recognize scenarios, so you can uninstall all scenarios or only selected scenarios.

Wann sollten native Images verwendet werden?Determining when to Use native images

Systemeigene Images bieten Leistungsverbesserungen in zwei Bereichen: verbesserte Arbeitsspeichernutzung und beschleunigte Startzeit.Native images can provide performance improvements in two areas: improved memory use and reduced startup time.

Hinweis

Die Leistung systemeigener Images hängt von einer Reihe von Faktoren ab, die die Leistungsanalyse erschweren. Dazu gehören Code- und Datenzugriffsmuster, die Anzahl der über Modulgrenzen hinweg ausgeführten Aufrufe und die Anzahl der bereits von anderen Anwendungen geladenen Abhängigkeiten.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. Die einzige Möglichkeit, einen eventuellen Nutzen systemeigener Images für Ihre Anwendung zu erkennen, besteht darin, gründliche Leistungsmessungen in den wichtigsten Bereitstellungsszenarien vorzunehmen.The only way to determine whether native images benefit your application is by careful performance measurements in your key deployment scenarios.

Verbesserte ArbeitsspeichernutzungImproved memory use

Systemeigene Images können die Arbeitsspeichernutzung entscheidend verbessern, wenn Code zwischen Prozessen freigegeben wird.Native images can significantly improve memory use when code is shared between processes. Systemeigene Images werden in Form von Windows PE-Dateien gespeichert. Eine einzelne Version einer DLL-Datei kann also von mehreren Prozessen gemeinsam genutzt werden. Vom JIT-Compiler erstellter systemeigener Code wird dagegen im privaten Speicher abgelegt und kann nicht freigegeben werden.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.

Unter Terminaldiensten ausgeführte Anwendungen können ebenfalls von freigegebenen Codepages profitieren.Applications that are run under terminal services can also benefit from shared code pages.

Wenn der JIT-Compiler nicht geladen wird, wird außerdem pro Anwendungsinstanz eine feste Speichergröße eingespart.In addition, not loading the JIT compiler saves a fixed amount of memory for each application instance.

Schnellerer AnwendungsstartFaster application startup

Durch das Vorkompilieren von Assemblys mit Ngen.exe kann die Startzeit einiger Anwendungen beschleunigt werden.Precompiling assemblies with Ngen.exe can improve the startup time for some applications. Zeit lässt sich im Allgemeinen dadurch gewinnen, dass Anwendungen Komponentenassemblys gemeinsam nutzen, denn nachdem die erste Anwendung gestartet wurde, sind die freigegebenen Komponenten für nachfolgende Anwendungen bereits geladen.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. Bei einem Kaltstart, bei dem alle Assemblys einer Anwendung von der Festplatte geladen werden müssen, fällt der Nutzen systemeigener Images geringer aus, da die Zeit für den Zugriff auf die Festplatte den Zeitgewinn wieder aufhebt.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.

Die feste Bindung kann die Startzeit verlangsamen, da alle Images, die eine feste Bindung an die Hauptassembly der Anwendung aufweisen, gleichzeitig geladen werden müssen.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.

Hinweis

Vor .NET Framework 3.5 Service Pack 1 müssen Sie freigegebene, mit starken Bezeichnungen benannte Komponenten in den globalen Assemblycache einschließen, da das Ladeprogramm für Assemblys mit starkem Namen, die nicht im globalen Assemblycache enthalten sind, eine zusätzliche Überprüfung ausführt. Dadurch wird jegliche Beschleunigung der Startzeit aufgrund der Verwendung systemeigener Images wieder zunichte gemacht.Before the .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. Aufgrund von Optimierungen, die in .NET Framework 3.5 SP 1 eingeführt wurden, wurden zusätzliche Überprüfungen überflüssig.Optimizations that were introduced in the .NET Framework 3.5 SP1 removed the extra validation.

Zusammenfassung der Überlegungen zur VerwendungSummary of usage considerations

Anhand der folgenden allgemeinen und anwendungsspezifischen Überlegungen können Sie feststellen, ob es sich lohnt, systemeigene Images für die Anwendung auszuwerten:The following general considerations and application considerations may assist you in deciding whether to undertake the effort of evaluating native images for your application:

  • Systemeigene Images werden schneller geladen als MSIL, da dafür zahlreiche Startaktivitäten, z. B. JIT-Kompilierung und Überprüfungen der Typsicherheit, nicht mehr notwendig sind.Native images load faster than MSIL because they eliminate the need for many startup activities, such as JIT compilation and type-safety verification.

  • Systemeigene Images erfordern kleinere anfängliche Workingsets, da der JIT-Compiler nicht benötigt wird.Native images require a smaller initial working set because there is no need for the JIT compiler.

  • Systemeigene Images ermöglichen die gemeinsame Codenutzung durch Prozesse.Native images enable code sharing between processes.

  • Für systemeigene Images wird mehr Festplattenspeicher als für MSIL-Assemblys benötigt, und für ihre Generierung ist möglicherweise wesentlich mehr Zeit erforderlich.Native images require more hard disk space than MSIL assemblies and may require considerable time to generate.

  • Systemeigene Images müssen verwaltet werden.Native images must be maintained.

    • Images müssen neu generiert werden, wenn die ursprüngliche Assembly oder eine ihrer Abhängigkeiten gewartet wird.Images need to be regenerated when the original assembly or one of its dependencies is serviced.

    • Für eine einzelne Assembly sind möglicherweise mehrere systemeigene Images zur Verwendung in verschiedenen Anwendungen oder verschiedenen Szenarien erforderlich.A single assembly may need multiple native images for use in different applications or different scenarios. Beispielsweise können die Konfigurationsinformationen in zwei Anwendungen zu unterschiedlichen Bindungsentscheidungen für dieselbe abhängige Assembly führen.For example, the configuration information in two applications might result in different binding decisions for the same dependent assembly.

    • Systemeigene Images müssen von einem Administrator generiert werden, d. h. ausgehend von einem Windows-Konto der Administratorgruppe.Native images must be generated by an administrator; that is, from a Windows account in the Administrators group.

Zusätzlich zu diesen allgemeinen Überlegungen muss bei der Frage, ob systemeigene Images einen Leistungsgewinn bringen, auch die Art der Anwendung berücksichtigt werden:In addition to these general considerations, the nature of your application must be considered when determining whether native images might provide a performance benefit:

  • Wenn die Anwendung in einer Umgebung ausgeführt wird, in der zahlreiche freigegebene Komponenten verwendet werden, können die Komponenten bei Verwendung systemeigener Images von mehreren Prozessen gemeinsam genutzt werden.If your application runs in an environment that uses many shared components, native images allow the components to be shared by multiple processes.

  • Wenn die Anwendung mehrere Anwendungsdomänen verwendet, ermöglichen systemeigene Images die gemeinsame Nutzung von Codepages zwischen Domänen.If your application uses multiple application domains, native images allow code pages to be shared across domains.

    Hinweis

    In .NET Framework Version 1.0 und 1.1 können systemeigene Images nicht zwischen Anwendungsdomänen freigegeben werden.In the .NET Framework versions 1.0 and 1.1, native images cannot be shared across application domains. Dies trifft auf Version 2.0 oder höher nicht zu.This is not the case in version 2.0 or later.

  • Wenn die Anwendung unter Terminalserver ausgeführt wird, lassen systemeigene Images die Freigabe von Codepages zu.If your application will be run under Terminal Server, native images allow sharing of code pages.

  • Bei umfangreicheren Anwendungen ist die Kompilierung in systemeigene Images normalerweise von Vorteil;Large applications generally benefit from compilation to native images. bei kleineren Anwendungen dagegen nicht.Small applications generally do not benefit.

  • Bei Anwendungen mit langer Laufzeit weist die JIT-Kompilierung zur Laufzeit eine etwas bessere Leistung als systemeigene Images auf.For long-running applications, run-time JIT compilation performs slightly better than native images. (Die feste Bindung kann diesen Leistungsunterschied in gewissem Umfang abschwächen.)(Hard binding can mitigate this performance difference to some degree.)

Wichtigkeit der Basisadressen von AssemblysImportance of assembly base addresses

Da es sich bei systemeigenen Images um Windows PE-Dateien handelt, unterliegen sie im Hinblick auf die Zurücksetzung denselben Voraussetzungen wie andere ausführbare Dateien.Because native images are Windows PE files, they are subject to the same rebasing issues as other executable files. Die Leistungseinbußen infolge der Umsetzung treten bei der festen Bindung sogar noch stärker hervor.The performance cost of relocation is even more pronounced if hard binding is employed.

Verwenden Sie die geeignete Compileroption zum Festlegen der Basisadresse für die Assembly, um die Basisadresse für ein systemeigenes Image anzugeben.To set the base address for a native image, use the appropriate option of your compiler to set the base address for the assembly. Von "Ngen.exe" wird diese Basisadresse für das systemeigene Image verwendet.Ngen.exe uses this base address for the native image.

Hinweis

Systemeigene Images sind größer als die verwalteten Assemblys, aus denen sie erstellt wurden.Native images are larger than the managed assemblies from which they were created. Basisadressen müssen unter Berücksichtigung dieses Größenunterschieds berechnet werden.Base addresses must be calculated to allow for these larger sizes.

Mit einem Tool wie "dumpbin.exe" können Sie die bevorzugte Basisadresse eines systemeigenen Images anzeigen.You can use a tool such as dumpbin.exe to view the preferred base address of a native image.

Feste BindungHard binding

Die feste Bindung erhöht den Durchsatz und reduziert die Größe des Workingsets für native Images.Hard binding increases throughput and reduces working set size for native images. Der Nachteil der festen Bindung besteht darin, dass sämtliche Images mit fester Bindung an eine Assembly beim Laden der Assembly ebenfalls geladen werden müssen.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. Dies kann die Startzeit bei umfangreichen Anwendungen deutlich verlängern.This can significantly increase startup time for a large application.

Die feste Bindung eignet sich für Abhängigkeiten, die in allen leistungskritischen Szenarien der Anwendung geladen werden.Hard binding is appropriate for dependencies that are loaded in all your application's performance-critical scenarios. Wie bereits bei anderen Verwendungsmöglichkeiten systemeigener Images stellen sorgfältige Leistungsmessungen auch hier den einzigen Indikator dafür dar, ob die Anwendungsleistung durch feste Bindung verbessert wird.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.

Über das DependencyAttribute-Attribut und das DefaultDependencyAttribute-Attribut können Sie "Ngen.exe" Hinweise zur Verwendung der festen Bindung übermitteln.The DependencyAttribute and DefaultDependencyAttribute attributes allow you to provide hard binding hints to Ngen.exe.

Hinweis

Diese Attribute stellen Hinweise und keine Befehle für Ngen.exe dar.These attributes are hints to Ngen.exe, not commands. Die Verwendung der festen Bindung kann durch diese Hinweise nicht garantiert werden.Using them does not guarantee hard binding. Die Bedeutung dieser Attribute kann sich in zukünftigen Releases ändern.The meaning of these attributes may change in future releases.

Angeben eines Bindungshinweises für eine AbhängigkeitSpecifying a binding hint for a dependency

Wenden Sie DependencyAttribute auf eine Assembly an, um die Wahrscheinlichkeit anzugeben, dass eine angegebene Abhängigkeit geladen wird.Apply the DependencyAttribute to an assembly to indicate the likelihood that a specified dependency will be loaded. LoadHint.Always gibt an, dass harte Bindung angemessen ist, Default gibt an, dass der Standard für die Abhängigkeit verwendet werden soll, und Sometimes gibt an, dass harte Bindung nicht angemessen ist.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.

Im folgenden Code werden die Attribute für eine Assembly veranschaulicht, die über zwei Abhängigkeiten verfügt.The following code shows the attributes for an assembly that has two dependencies. Die erste Abhängigkeit (Assembly1) ist ein geeigneter Kandidat für die feste Bindung und die zweite Abhängigkeit (Assembly2) nicht.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)];

Der Assemblyname enthält keine Dateinamenerweiterung.The assembly name does not include the file name extension. Anzeigenamen können verwendet werden.Display names can be used.

Angeben eines standardmäßigen Bindungshinweises für eine AssemblySpecifying a default binding hint for an assembly

Standardmäßige Bindungshinweise werden nur für Assemblys benötigt, die direkt und häufig von einer Anwendung verwendet werden, die über eine Abhängigkeit zu diesen Assemblys verfügt.Default binding hints are only needed for assemblies that will be used immediately and frequently by any application that has a dependency on them. Wenden Sie DefaultDependencyAttribute mit LoadHint.Always auf diese Assemblys an, um anzugeben, dass die feste Bindung verwendet werden soll.Apply the DefaultDependencyAttribute with LoadHint.Always to such assemblies to specify that hard binding should be used.

Hinweis

Es gibt keinen Grund, DefaultDependencyAttribute auf DLL-Assemblys anzuwenden, die nicht in diese Kategorie fallen, da das Anwenden des Attributs mit einem anderen Wert als LoadHint.Always ohne Auswirkung bleibt.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 verwendet das DefaultDependencyAttribute, um die feste Bindung als Standard für eine verhältnismäßig kleine Anzahl von Assemblys in .NET Framework anzugeben, beispielsweise mscorlib.dll.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.

Verzögertes VerarbeitenDeferred processing

Die Generierung von systemeigenen Images für eine sehr große Anwendung kann sehr viel Zeit beanspruchen.Generation of native images for a very large application can take considerable time. Entsprechend können Änderungen an einer freigegebenen Komponente oder an den Computereinstellungen die Aktualisierung vieler systemeigener Images erfordern.Similarly, changes to a shared component or changes to computer settings might require many native images to be updated. Die Aktion install und die Aktion update verfügen über eine Option /queue, über die Sie den Vorgang zur verzögerten Ausführung in eine Warteschlange stellen und vom Dienst für systemeigene Images verarbeiten lassen können.The install and update actions have a /queue option that queues the operation for deferred execution by the native image service. Außerdem verfügt "Ngen.exe" über die Aktion queue und die Aktion executeQueuedItems, mit der der Dienst in gewissem Umfang gesteuert werden kann.In addition, Ngen.exe has queue and executeQueuedItems actions that provide some control over the service. Weitere Informationen finden Sie unter Dienst für systemeigene Abbilder.For more information, see Native Image Service.

Native Images und JIT-KompilierungNative images and JIT compilation

Wenn Ngen.exe auf Methoden in einer Assembly trifft, die von diesem Programm nicht generiert werden können, werden diese Methoden aus dem systemeigenen Image ausgeschlossen.If Ngen.exe encounters any methods in an assembly that it cannot generate, it excludes them from the native image. Wenn die Laufzeit diese Assembly ausführt, werden die nicht im systemeigenen Image enthaltenen Methoden auf JIT-Kompilierung zurückgesetzt.When the runtime executes this assembly, it reverts to JIT compilation for the methods that were not included in the native image.

Darüber hinaus werden systemeigene Images nicht verwendet, wenn die Assembly aktualisiert wurde bzw. das Image aus irgendeinem Grund ungültig geworden ist.In addition, native images are not used if the assembly has been upgraded, or if the image has been invalidated for any reason.

Ungültige ImagesInvalid images

Wenn Sie mit "Ngen.exe" ein systemeigenes Image einer Assembly erstellen, hängt die Ausgabe von den Optionen in der Befehlszeile und den Computereinstellungen ab.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. Dies betrifft folgende Einstellungen:These settings include the following:

  • Die Version von .NET Framework.The version of the .NET Framework.

  • Die Version des Betriebssystems, wenn der Wechsel von der Windows 9x-Familie zur Windows NT-Familie durchgeführt wird.The version of the operating system, if the change is from the Windows 9x family to the Windows NT family.

  • Die genaue Identität der Assembly (durch Neukompilierung wird die Identität geändert).The exact identity of the assembly (recompilation changes identity).

  • Die genaue Identität aller Assemblys, auf die die Assembly verweist (durch Neukompilierung wird die Identität geändert).The exact identity of all assemblies that the assembly references (recompilation changes identity).

  • Sicherheitsfaktoren.Security factors.

Diese Daten werden beim Generieren eines systemeigenen Image von Ngen.exe aufgezeichnet.Ngen.exe records this information when it generates a native image. Beim Ausführen einer Assembly sucht die Common Language Runtime nach dem systemeigenen Image, das mit den Optionen und Einstellungen in Übereinstimmung mit der aktuellen Computerumgebung generiert wurde.When you execute an assembly, the runtime looks for the native image generated with options and settings that match the computer's current environment. Die Laufzeit wird auf die JIT-Kompilierung einer Assembly zurückgesetzt, falls kein geeignetes systemeigenes Image gefunden werden kann.The runtime reverts to JIT compilation of an assembly if it cannot find a matching native image. Die folgenden Änderungen an den Einstellungen und der Umgebung eines Computers führen dazu, dass systemeigene Images ungültig werden:The following changes to a computer's settings and environment cause native images to become invalid:

  • Die Version von .NET Framework.The version of the .NET Framework.

    Wenn Sie .NET Framework aktualisieren, werden alle von Ihnen mit Ngen.exe erstellten systemeigenen Images ungültig.If you apply an update to the .NET Framework, all native images that you have created using Ngen.exe become invalid. Aus diesem Grund wird bei allen Updates von .NET Framework der Befehl Ngen Update ausgeführt, um sicherzustellen, dass alle systemeigenen Images erneut generiert werden.For this reason, all updates of the .NET Framework execute the Ngen Update command, to ensure that all native images are regenerated. .NET Framework erzeugt automatisch neue systemeigene Images für die .NET Framework-Bibliotheken, die installiert werden.The .NET Framework automatically creates new native images for the .NET Framework libraries that it installs.

  • Die Version des Betriebssystems, wenn der Wechsel von der Windows 9x-Familie zur Windows NT-Familie durchgeführt wird.The version of the operating system, if the change is from the Windows 9x family to the Windows NT family.

    Wenn sich beispielsweise die Version des Betriebssystems eines Computers von Windows 98 in Windows XP ändert, werden alle nativen Images im Cache für native Images ungültig.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. Wenn sich das Betriebssystem jedoch von Windows 2000 in Windows XP ändert, werden die Images nicht ungültig.However, if the operating system changes from Windows 2000 to Windows XP, the images are not invalidated.

  • Die genaue Identität der Assembly.The exact identity of the assembly.

    Nach dem Neukompilieren einer Assembly wird das systemeigene Image der Assembly ungültig.If you recompile an assembly, the assembly's corresponding native image becomes invalid.

  • Die genaue Identität aller Assemblys, auf die die Assembly verweist.The exact identity of any assemblies the assembly references.

    Wenn Sie eine verwaltete Assembly aktualisieren, werden alle systemeigenen Images, die direkt oder indirekt von dieser Assembly abhängen, ungültig und müssen erneut generiert werden.If you update a managed assembly, all native images that directly or indirectly depend on that assembly become invalid and need to be regenerated. Dies betrifft sowohl normale Verweise als auch fest gebundene Abhängigkeiten.This includes both ordinary references and hard-bound dependencies. Bei jedem Softwareupdate sollte das Installationsprogramm den Befehl Ngen Update ausführen, um sicherzustellen, dass alle abhängigen systemeigenen Images erneut generiert werden.Whenever a software update is applied, the installation program should execute an Ngen Update command to ensure that all dependent native images are regenerated.

  • Sicherheitsfaktoren.Security factors.

    Wenn die Sicherheitsrichtlinien eines Computers so geändert werden, dass Berechtigungen für eine Assembly widerrufen werden, können vorher kompilierte systemeigene Images für die entsprechende Assembly ungültig werden.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.

    Ausführliche Informationen über die Verwaltung der Codezugriffssicherheit durch die Common Language Runtime und die Verwendung von Berechtigungen finden Sie unter Codezugriffssicherheit.For detailed information about how the common language runtime administers code access security and how to use permissions, see Code Access Security.

ProblembehandlungTroubleshooting

In den folgenden Themen zur Problembehandlung wird erläutert, welche nativen Images verwendet werden und welche von der Anwendung nicht unterstützt werden. So können Sie feststellen, wann der JIT-Compiler beginnt, eine Methode zu kompilieren. Zudem wird gezeigt, wie Sie die Kompilierung nativer Images für bestimmte Methoden deaktivieren können.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 ViewerAssembly Binding Log Viewer

Um zu überprüfen, ob native Images von der Anwendung verwendet werden, können Sie den Assembly Binding Log Viewer (Fuslogvw.exe) verwenden.To confirm that native images are being used by your application, you can use the Fuslogvw.exe (Assembly Binding Log Viewer). Wählen Sie im Fenster der Bindungsprotokollanzeige im Feld Kategorien protokollieren die Option Native Images aus.Select Native Images in the Log Categories box on the binding log viewer window. Fuslogvw.exe liefert Informationen über die Gründe, aus denen ein systemeigenes Image abgelehnt wurde.Fuslogvw.exe provides information about why a native image was rejected.

Der Assistent für verwaltetes Debuggen (jitCompilationStart)The JITCompilationStart managed debugging assistant

Mit dem Assistenten für verwaltetes Debuggen, jitCompilationStart, können Sie bestimmen, wann der JIT-Compiler mit der Kompilierung einer Funktion beginnt.You can use the jitCompilationStart managed debugging assistant (MDA) to determine when the JIT compiler starts to compile a function.

Deaktivieren der Generierung nativer ImagesOpting out of native image generation

In einigen Fällen hat NGen.exe möglicherweise Probleme beim Generieren eines nativen Images für eine bestimmte Methode, oder Sie bevorzugen, dass die Methode statt in ein natives Image JIT-kompiliert wird.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. In diesem Fall können Sie mit dem Attribut System.Runtime.BypassNGenAttribute verhindern, dass NGen.exe ein natives Image für eine bestimmte Methode generiert.In this case, you can use the System.Runtime.BypassNGenAttribute attribute to prevent NGen.exe from generating a native image for a particular method. Das Attribut muss einzeln auf jede Methode angewendet werden, deren Code nicht in das native Image eingeschlossen werden soll.The attribute must be applied individually to each method whose code you do not want to include in the native image. NGen.exe erkennt das Attribut und generiert keinen Code im nativen Image für die entsprechende Methode.NGen.exe recognizes the attribute and does not generate code in the native image for the corresponding method.

Beachten Sie jedoch, dass BypassNGenAttribute in der .NET Framework-Klassenbibliothek nicht als Typ definiert ist.Note, however, that BypassNGenAttribute is not defined as a type in the .NET Framework Class Library. Um das Attribut im Code verwenden zu können, müssen Sie es zunächst wie folgt definieren:In order to consume the attribute in your code, you must first define it as follows:

namespace System.Runtime
{
   [AttributeUsage(AttributeTargets.Method | 
                   AttributeTargets.Constructor | 
                   AttributeTargets.Property)]
   public class BypassNGenAttribute : Attribute 
   {
   }   
}
Namespace System.Runtime
   <AttributeUsage(AttributeTargets.Method Or 
                   AttributeTargets.Constructor Or 
                   AttributeTargets.Property)>
   Public Class BypassNGenAttribute : Inherits Attribute 
   End Class   
End Namespace

Anschließend können Sie das Attribut methodenweise anwenden.You can then apply the attribute on a per-method basis. Im folgende Beispiel wird Native Image Generator angewiesen, kein natives Image für die Methode ExampleClass.ToJITCompile zu generieren.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

BeispieleExamples

Mit dem folgenden Befehl wird ein systemeigenes Image für ClientApp.exe generiert, im aktuellen Verzeichnis abgelegt und anschließend im Cache für systemeigene Images installiert.The following command generates a native image for ClientApp.exe, located in the current directory, and installs the image in the native image cache. Wenn eine Konfigurationsdatei für die Assembly vorhanden ist, wird sie von Ngen.exe verwendet.If a configuration file exists for the assembly, Ngen.exe uses it. Außerdem werden systemeigene Images für alle DLL-Dateien generiert, auf die ClientApp.exe verweist.In addition, native images are generated for any .dll files that ClientApp.exe references.

ngen install ClientApp.exe

Ein mit Ngen.exe installiertes Image wird auch als Stammelement bezeichnet.An image installed with Ngen.exe is also called a root. Ein Stammelement kann eine Anwendung oder eine freigegebene Komponente sein.A root can be an application or a shared component.

Durch den folgenden Befehl wird ein systemeigenes Image für MyAssembly.exe mit dem angegebenen Pfad generiert.The following command generates a native image for MyAssembly.exe with the specified path.

ngen install c:\myfiles\MyAssembly.exe

Bei der Suche nach Assemblys und ihren Abhängigkeiten verwendet Ngen.exe dieselbe Überprüfungslogik wie die Common Language Runtime.When locating assemblies and their dependencies, Ngen.exe uses the same probing logic used by the common language runtime. Das Verzeichnis, in dem ClientApp.exe enthalten ist, wird standardmäßig als Basisverzeichnis der Anwendung verwendet, und sämtliche Überprüfungen von Assemblys werden in diesem Verzeichnis gestartet.By default, the directory that contains ClientApp.exe is used as the application base directory, and all assembly probing begins in this directory. Sie können dieses Verhalten mit der Option /AppBase überschreiben.You can override this behavior by using the /AppBase option.

Hinweis

Dies ist eine Änderung im Verhalten von "Ngen.exe" gegenüber .NET Framework Version 1.0 und 1.1, bei denen die Anwendungsbasis auf das aktuelle Verzeichnis festgelegt wird.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.

Eine Assembly kann über eine Abhängigkeit ohne Verweis verfügen, wenn sie beispielsweise eine DLL-Datei mithilfe der Assembly.Load-Methode lädt.An assembly can have a dependency without a reference, for example if it loads a .dll file by using the Assembly.Load method. Sie können mit der Option /ExeConfig ein systemeigenes Image für eine solche DLL-Datei erstellen, indem Sie Konfigurationsinformationen für die Anwendungsassembly verwenden.You can create a native image for such a .dll file by using configuration information for the application assembly, with the /ExeConfig option. Der folgende Befehl generiert ein systemeigenes Image für MyLib.dll, mithilfe der Konfigurationsinformationen aus 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

Auf diese Weise installierte Assemblys werden nicht entfernt, wenn die Anwendung entfernt wird.Assemblies installed in this way are not removed when the application is removed.

Verwenden Sie zum Deinstallieren einer Abhängigkeit dieselben Befehlszeilenoptionen wie beim Installieren.To uninstall a dependency, use the same command-line options that were used to install it. Durch den folgenden Befehl wird MyLib.dll aus dem vorherigen Beispiel deinstalliert.The following command uninstalls the MyLib.dll from the previous example.

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

Verwendung Sie zum Erstellen eines systemeigenen Images für eine Assembly im globalen Assemblycache den Anzeigenamen der Assembly.To create a native image for an assembly in the global assembly cache, use the display name of the assembly. Beispiel:For example:

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

Ngen.exe generiert einen separaten Satz von Images für jedes Szenario, das Sie installieren.NGen.exe generates a separate set of images for each scenario you install. Durch die folgenden Befehle wird beispielsweise ein vollständiger Satz von systemeigenen Images für den normalen Ablauf, ein anderer vollständiger Satz für das Debuggen und ein dritter Satz für die Profilerstellung erstellt: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

Anzeigen des Caches für systemeigene ImagesDisplaying the Native Image Cache

Sobald systemeigene Images im Cache installiert wurden, können sie mit "Ngen.exe" angezeigt werden.Once native images are installed in the cache, they can be displayed using Ngen.exe. Der folgende Befehl dient zur Anzeige aller systemeigenen Images im Cache für systemeigene Images.The following command displays all native images in the native image cache.

ngen display

Durch die Aktion display werden zuerst alle Stammassemblys und dann alle systemeigenen Images auf dem Computer aufgelistet.The display action lists all the root assemblies first, followed by a list of all the native images on the computer.

Verwenden Sie den einfachen Namen einer Assembly, um nur Informationen für diese Assembly anzuzeigen.Use the simple name of an assembly to display information only for that assembly. Durch den folgenden Befehl werden alle systemeigenen Images aus dem Cache für systemeigene Images angezeigt, die den Teilnamen MyAssembly aufweisen, sowie ihre Abhängigkeiten und alle Stammassemblys, die über eine Abhängigkeit zu MyAssembly verfügen: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

Zum Beurteilen des Einflusses, den eine update-Aktion nach der Aktualisierung der freigegebenen Komponente hat, ist es hilfreich, die Stammassemblys zu kennen, die von der Assembly der freigegebenen Komponente abhängen.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.

Wenn Sie die Dateierweiterung einer Assembly angeben, müssen Sie entweder den Pfad angeben oder "Ngen.exe" von dem Verzeichnis aus ausführen, in dem die Assembly enthalten ist: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

Der folgende Befehl dient zur Anzeige aller nativen Images im Cache für native Images mit dem Namen MyAssembly und der Version 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"

Aktualisieren von ImagesUpdating Images

Images werden normalerweise aktualisiert, nachdem eine freigegebene Komponente aktualisiert wurde.Images are typically updated after a shared component has been upgraded. Verwenden Sie zum Aktualisieren aller systemeigenen Images, die bzw. deren Abhängigkeiten geändert wurden, die Aktion update ohne Argumente.To update all native images that have changed, or whose dependencies have changed, use the update action with no arguments.

ngen update

Das Aktualisieren aller Images kann ein langwieriger Prozess sein.Updating all images can be a lengthy process. Sie können die Updates mit der Option /queue in eine Warteschlange stellen, um sie vom Dienst für systemeigene Images ausführen zu lassen.You can queue the updates for execution by the native image service by using the /queue option. Weitere Informationen zur Option /queue und den Prioritäten bei der Installation finden Sie unter Dienst für systemeigene Abbilder.For more information on the /queue option and installation priorities, see Native Image Service.

ngen update /queue

Deinstallieren von ImagesUninstalling Images

"Ngen.exe" verwaltet eine Liste von Abhängigkeiten. Freigegebene Komponenten können demnach nur entfernt werden, nachdem alle Assemblys, die von diesen Komponenten abhängen, entfernt wurden.Ngen.exe maintains a list of dependencies, so that shared components are removed only when all assemblies that depend on them have been removed. Darüber hinaus wird eine freigegebene Komponente, die als Stammelement installiert wurde, nicht entfernt.In addition, a shared component is not removed if it has been installed as a root.

Mit dem folgenden Befehl werden alle Szenarien für den Stamm ClientApp.exe deinstalliert:The following command uninstalls all scenarios for the root ClientApp.exe:

ngen uninstall ClientApp

Mit der Aktion uninstall können bestimmte Szenarien entfernt werden.The uninstall action can be used to remove specific scenarios. Mit dem folgenden Befehl werden alle Debugszenarien für ClientApp.exe deinstalliert:The following command uninstalls all debug scenarios for ClientApp.exe:

ngen uninstall ClientApp /debug

Hinweis

Beim Deinstallieren von /debug-Szenarien werden keine Szenarien deinstalliert, die sowohl /profile als auch /debug. enthalten.Uninstalling /debug scenarios does not uninstall a scenario that includes both /profile and /debug.

Mit dem folgenden Befehl werden alle Szenarien für eine bestimmte Version von ClientApp.exe deinstalliert:The following command uninstalls all scenarios for a specific version of ClientApp.exe:

ngen uninstall "ClientApp, Version=1.0.0.0"

Mit den folgenden Befehlen werden alle Szenarien für "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", oder nur das Debugszenario für diese Assembly deinstalliert: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

Wie bei der Aktion install erfordert die Angabe einer Erweiterung entweder, dass "Ngen.exe" von dem Verzeichnis aus ausgeführt werden muss, in dem die Assembly enthalten ist, oder dass der vollständige Pfad angegeben werden muss.As with the install action, supplying an extension requires either executing Ngen.exe from the directory containing the assembly or specifying a full path.

Beispiele, die sich auf den Dienst für systemeigene Abbilder beziehen, finden Sie unter Dienst für systemeigene Abbilder.For examples relating to the native image service, see Native Image Service.

Aufgabe zur Generierung nativer ImagesNative Image Task

Die Aufgabe zur Generierung systemeigener Images ist eine Windows-Aufgabe, die systemeigene Images generiert und verwaltet.The native image task is a Windows task that generates and maintains native images. Die Aufgabe zur Generierung nativer Images geht so vor, dass sie automatisch native Images für die unterstützten Szenarien generiert und freigibt.The native image task generates and reclaims native images automatically for supported scenarios. Sie ermöglichte es Installationsprogrammen außerdem, Ngen.exe (Native Image Generator) zu verwenden, um native Images nach einer Zeitverzögerung zu erstellen und zu aktualisieren.It also enables installers to use Ngen.exe (Native Image Generator) to create and update native images at a deferred time.

Die Aufgabe zur Generierung nativer Images wird einmal für jede CPU-Architektur registriert, die auf einem Computer unterstützt wird. Dadurch ist es möglich, Anwendungen zu kompilieren, die genau für jede Architektur angepasst sind:The native image task is registered once for each CPU architecture supported on a computer, to allow compilation for applications that target each architecture:

AufgabennameTask name 32-Bit-Computer32-bit computer 64-Bit-Computer64-bit computer
NET Framework NGEN v4.0.30319NET Framework NGEN v4.0.30319 JaYes JaYes
NET Framework NGEN v4.0.30319 64NET Framework NGEN v4.0.30319 64 NeinNo JaYes

Die Aufgabe zur Generierung nativer Images ist in .NET Framework 4.5 und höher verfügbar, wenn sie unter Windows 8 oder höher ausgeführt wird.The native image task is available in the .NET Framework 4.5 and later versions, when running on Windows 8 or later. In früheren Versionen von Windows verwendet .NET Framework den Dienst für systemeigene Abbilder.On earlier versions of Windows, the .NET Framework uses the Native Image Service.

Lebensdauer der AufgabeTask Lifetime

Üblicherweise startet der Windows-Taskplaner die Aufgabe zur Generierung systemeigener Images jede Nacht, wenn sich der Computer im Leerlauf befindet.In general, the Windows Task Scheduler starts the native image task every night when the computer is idle. Die Aufgabe prüft auf zurückgestellte Arbeit, die von Anwendungsinstallationsprogrammen in die Warteschlange eingereiht wurde, auf zurückgestellte Aktualisierungsanforderungen für systemeigene Images sowie auf automatische Imageerstellung.The task checks for any deferred work that is queued by application installers, any deferred native image update requests, and any automatic image creation. Die Aufgabe schließt ausstehende Arbeitselemente ab und fährt dann herunter.The task completes outstanding work items and then shuts down. Wird für den Computer der Leerlaufzustand beendet, während die Aufgabe ausgeführt wird, wird die Aufgabe beendet.If the computer stops being idle while the task is running, the task stops.

Sie können die Aufgabe zur Generierung systemeigener Images auch manuell über die Taskplaner-Benutzeroberfläche oder durch manuelle Aufrufe von "NGen.exe" starten.You can also start the native image task manually through the Task Scheduler UI or through manual calls to NGen.exe. Wird die Aufgabe mit einer dieser Methoden gestartet, wird sie weiter ausgeführt, wenn der Computer nicht mehr im Leerlauf ist.If the task is started through either of these methods, it will continue running when the computer is no longer idle. Images, die manuell mit "NGen.exe" erstellt wurden, werden priorisiert, um vorhersagbares Verhalten für Installationsprogramme von Anwendungen zu ermöglichen.Images created manually by using NGen.exe are prioritized to enable predictable behavior for application installers.

Dienst für systemeigene AbbilderNative Image Service

Der Dienst für systemeigene Abbilder ist ein Windows-Dienst, der systemeigene Abbilder (Images) generiert und verwaltet.The native image service is a Windows service that generates and maintains native images. Der Dienst für systemeigene Abbilder ermöglicht es dem Entwickler, die Installation und Aktualisierung von systemeigenen Abbildern in Zeiträume zu verschieben, in denen sich der Computer im Leerlauf befindet.The native image service allows the developer to defer the installation and update of native images to periods when the computer is idle.

Normalerweise wird der Dienst für systemeigene Abbilder vom Installationsprogramm (Installer) für eine Anwendung oder ein Update gestartet.Normally, the native image service is initiated by the installation program (installer) for an application or update. Für Aktionen mit Priorität 3 wird der Dienst während Leerlaufzeiten des Computer ausgeführt.For priority 3 actions, the service executes during idle time on the computer. Der Dienst speichert seinen Zustand und kann, sofern erforderlich, selbst nach mehreren Neustarts fortgesetzt werden.The service saves its state and is capable of continuing through multiple reboots if necessary. Mehrere Imagekompilierungen können in die Warteschlange gestellt werden.Multiple image compilations can be queued.

Der Dienst interagiert außerdem mit dem manuellen Befehl "Ngen.exe".The service also interacts with the manual Ngen.exe command. Manuelle Befehle haben Vorrang vor Hintergrundaktivitäten.Manual commands take precedence over background activity.

Hinweis

Unter Windows Vista ist der Anzeigenamen für den Dienst für systemeigene Abbilder "Microsoft.NET Framework NGEN 50727_X86" oder "Microsoft.NET Framework NGEN 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". Bei allen früheren Versionen von Microsoft Windows lautet der Name ".NET Runtime Optimization Service 50727_X86" oder ".NET Runtime Optimization Service 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".

Starten verzögerter VorgängeLaunching Deferred Operations

Es empfiehlt sich, vor dem Starten einer Installation oder Aktualisierung den Dienst zu beenden.Before beginning an installation or upgrade, pausing the service is recommended. Dadurch ist sichergestellt, dass der Dienst nicht ausgeführt wird, während das Installationsprogramm Dateien kopiert oder Assemblys im globalen Assemblycache ablegt.This ensures that the service does not execute while the installer is copying files or putting assemblies in the global assembly cache. Die folgende Befehlszeile von "Ngen.exe" beendet den Dienst:The following Ngen.exe command line pauses the service:

ngen queue pause

Nachdem alle verzögerten Vorgänge in die Warteschlange gestellt wurden, kann der Dienst mit dem folgenden Befehl fortgesetzt werden:When all deferred operations have been queued, the following command allows the service to resume:

ngen queue continue

Um die Generierung von systemeigenen Images zu verzögern, wenn eine neue Anwendung installiert oder eine freigegebene Komponente aktualisiert wird, verwenden Sie die /queue-Option mit der install- oder der update-Aktion.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. Mit den folgenden Befehlszeilen in "Ngen.exe" wird ein systemeigenes Image für eine freigegebene Komponente installiert und werden alle Stammelemente aktualisiert, die möglicherweise betroffen sind: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

Die update-Aktion bewirkt, dass alle systemeigenen Images neu generiert werden, die ungültig geworden sind, nicht nur diejenigen, für die MyComponent verwendet wird.The update action regenerates all native images that have been invalidated, not just those that use MyComponent.

Wenn die Anwendung aus vielen Stammelemente besteht, können Sie die Priorität der verzögerten Aktionen steuern.If your application consists of many roots, you can control the priority of the deferred actions. Die folgenden Befehle stellen die Installation der drei Stammelemente in die Warteschlange.The following commands queue the installation of three roots. Assembly1 wird zuerst installiert, ohne dass auf eine Leerlaufzeit gewartet wird.Assembly1 is installed first, without waiting for idle time. Assembly2 wird ebenfalls ohne Warten auf eine Leerlaufzeit installiert, aber erst, nachdem alle Aktionen mit Priorität 1 abgeschlossen sind.Assembly2 is also installed without waiting for idle time, but after all priority 1 actions have completed. Assembly3 wird installiert, wenn der Dienst feststellt, dass sich der Computer im Leerlauf befindet.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

Durch Verwenden der executeQueuedItems-Aktion können Sie erzwingen, dass in der Warteschlange befindliche Aktionen gleichzeitig ausgeführt werden.You can force queued actions to occur synchronously by using the executeQueuedItems action. Wenn Sie die optionale Priorität angeben, wirkt sich diese Aktion nur auf die Aktionen in der Warteschlange aus, die dieselbe oder eine niedrigere Priorität haben.If you supply the optional priority, this action affects only the queued actions that have equal or lower priority. Da die Standardpriorität gleich 3 ist, verarbeitet der folgende "Ngen.exe"-Befehl alle in der Warteschlange befindlichen Aktionen sofort, und er wird erst beendet, wenn die Aktionen abgeschlossen sind: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

Synchrone Befehle werden von "Ngen.exe" ausgeführt, und für sie wird nicht Dienst für systemeigene Abbilder verwendet.Synchronous commands are executed by Ngen.exe and do not use the native image service. Sie können Aktionen mit "Ngen.exe" ausführen, während der Dienst für systemeigene Abbilder ausgeführt wird.You can execute actions using Ngen.exe while the native image service is running.

Beenden des DienstsService Shutdown

Nachdem der Dienst durch Ausführen eines "Ngen.exe"-Befehls, der die /queue-Option enthält, gestartet wurde, wird er im Hintergrund ausgeführt, bis alle Aktionen abgeschlossen wurden.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. Der Dienst speichert seinen Zustand, sodass er, sofern erforderlich, selbst nach mehreren Neustarts fortgesetzt werden kann.The service saves its state so that it can continue through multiple reboots if necessary. Wenn der Dienst feststellt, dass es keine weiteren Aktionen in der Warteschlange gibt, setzt er seinen Status zurück, sodass er beim nächsten Computerstart nicht neu gestartet wird, und dann beendet sich der Dienst selbst.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.

Dienstinteraktion mit ClientsService Interaction with Clients

In .NET Framework 2.0 erfolgt die einzige Interaktion mit dem Dienst für systemeigene Abbilder über das Befehlszeilentool "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. Verwenden Sie das Befehlszeilentool in Installationsskripts, um Aktionen für den Dienst für systemeigene Abbilder in die Warteschlange zu stellen und mit dem Dienst zu interagieren.Use the command-line tool in installation scripts to queue actions for the native image service and to interact with the service.

Siehe auchSee also