Native Image

Eintrag zuletzt aktualisiert am: 21.09.2011

Natürlich ist Managed Code langsamer als Native Code, wobei der Geschwindigkeitsunterschied sehr viel geringer ist als man vermuten kann. Wenn jedoch die optimale Geschwindigkeit notwendig ist, besteht die Möglichkeit, eine Managed Code-Datei einmalig in eine Native Code-Datei umzuwandeln. Dazu dient das Werkzeug ngen.exe. Der Vorgang wird als "Pre-Jitting" bezeichnet. Das Result von ngen.exe nennt man ein Native Image. Ngen.exe wurde in .NET 2.0 stark vereinfacht (z.B. werden nun alle referenzierten Komponenten automatisch mit übersetzt).

Grundsätzlich kann zwar ein Native Image bereits während der Entwicklung erzeugt werden, aufgrund der plattformspezifischen Übersetzung bietet es sich jedoch an, das Native Image erst bei der Installation einer .NET-Anwendung zu erzeugen (Install Time Compilation). Das Native Image ist spezifisch für eine bestimmte Version der .NET-Laufzeitumgebung. Auch benötigen DOS- und NT-basierte Windows-Systeme verschiedene Native Images. Auch eine .NET-Anwendung, die in einem Native Image gespeichert ist, benötigt die .NET-Laufzeitumgebung, um ausgeführt werden zu können.

ngen.exe

Ein Native Image wird über das Werkzeuge ngen.exe erzeugt, das Teil des .NET Framework Redistributable ist. Implementiert ist der Pre-Jitter in der mscorpe.dll.

Ngen.exe 2.0

Zitat aus Dokumentation:

"Ngen.exe has changed significantly in the .NET Framework version 2.0.
Installing an assembly also installs ist dependencies, simplifying the syntax of Ngen.exe.
Native images can now be shared across application domains.
A new action, update, recreates images that have been invalidated.
Actions can be deferred, and deferred actions can be executed as a batch.
Some causes of image invalidation have been eliminated." (Microsoft)

Ab .NET 4.5

Microsoft verzichtet bei der Installation nun darauf, ein Native Image aller Assemblies zu erzeugen. Stattdessen protokolliert die CLR die Benutzung von Managed Code mit und erzeugt dann bei Bedarf ein Native Image in einem Cache.