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)
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.