2013-12-16 4 views

Antwort

23

Für die Codeausführung auf der .NET-Plattform muss die Common Intermediate Language (CIL) -Darstellung in Maschinencode übersetzt werden. Wenn dies unmittelbar vor der Ausführung geschieht, wird dies als JIT (Just In Time) -Kompilierung bezeichnet. Die Ausgabe von JIT wird nicht beibehalten, sodass Ihre verwaltete Anwendung bei jedem Start JIT durchlaufen muss.

Alternativ können Sie Vorkompilierung verwenden, um Startup-Overheads im Zusammenhang mit der JIT-Kompilierung zu reduzieren. NGen führt die Vorkompilierung durch und behält die nativen Bilder in einem nativen Bildcache bei. Dann können Anwendungen mit den systemeigenen Images ausgeführt werden und aufgrund des reduzierten JIT-Kompilierungsaufwands möglicherweise eine schnellere Startzeit haben. Zu Beginn war NGen eine Installationszeit-Technologie, Entwickler ließen Anwendungsprogrammierer NGen-Befehle ausgeben, um die Vorkompilierung während der Installationszeit auszulösen. Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/magazine/cc163808.aspx. Dieser Artikel enthält eine Beispielanwendung, die NGen nutzt.

Mit Windows   8 (.NET 4.5), ein neuer NGen-Modus: "Auto NGen" wurde eingeführt. Im Wesentlichen generiert die .NET-Laufzeit Verwendungsprotokolle für verwaltete Anwendungen. Wenn das System inaktiv ist, wird eine automatische Wartungsaufgabe im Hintergrund ausgeführt und generiert systemeigene Images. Auf diese Weise müssen sich Entwickler nicht mehr explizit mit NGen auseinandersetzen. Beachten Sie, dass diese Funktion nur für .NET 4.5 + -Anwendungen aktiviert ist, die auf Windows Store ausgerichtet sind, oder verwenden Sie die GAC. Hier ist eine MSDN-Seite, die hilfreich sein kann: http://msdn.microsoft.com/en-us/library/hh691758(v=vs.110).aspx

Und das ist High-Level Überblick über NGen und verwandte Technologien: Got a need for speed? .NET applications start faster

Schließlich .NET Framework Bibliotheken selbst NGen für eine bessere Leistung verwenden. Wenn .NET Framework gewartet wird, werden einige der systemeigenen Images ungültig gemacht. Dann muss NGen ausgeführt werden, um die ungültigen nativen Bilder neu zu generieren. Dies geschieht automatisch über den .NET Runtime Optimization Service, der während der Leerlaufzeit ausgeführt wird.

+2

Die ersten beiden MSDN-Verbindungen sind unterbrochen. –

2

Per MSDN:

Der Native Image Generator (Ngen.exe) ist ein Werkzeug, das die Leistung von verwalteten Anwendungen verbessert. Ngen.exe erstellt systemeigene Images, bei denen es sich um kompilierten prozessorspezifischen Computercode handelt, und installiert sie im systemeigenen Image-Cache auf dem lokalen Computer. Die Laufzeitumgebung kann systemeigene Images aus dem Cache verwenden, anstatt den Just-In-Time-Compiler (JIT) zum Kompilieren der ursprünglichen Assembly zu verwenden.

Ich habe NGEN in der Vergangenheit während der Installation verwendet, so dass die Software schneller starten würde.

1

NGen (Native Image Generator) kompiliert im Grunde .NET Byte-Code (CIL) in systemeigenen Code für den Computer, auf dem es läuft. Der Vorteil ist, dass Sie den Code nicht jedes Mal nativ kompilieren, wenn Sie ihn ausführen oder benötigen, aber Sie tun es nur einmal, die Anwendung startet und läuft schneller. Wenn Sie mehr Informationen benötigen, gibt es eine Menge Ressourcen über die Vorteile von JIT vs. Ahead of Time Compilation (was auch NGen tut).

+0

Wenn Sie weitere Informationen hinzufügen können, wie das, was sind die Szenarien, in denen PreJIT-Kompilierung stattfindet, die wirklich hilfreich sein wird. – Dhiren

+0

Meistens, wenn Sie ein .NET Framework-Update installieren (das .NET Framework ist nicht kompatibel) und wenn Sie eine Assembly auf dem GAC platzieren. – Rafael

4

.NET compilation flow

Wenn ein .NET-Compiler C# oder VB kompilieren.NET-Code es halb kompiliert sie und erstellt CIL Code. Wenn Sie diese halbkompilierte .NET EXE-Datei ausführen, wird der JIT im Hintergrund ausgeführt und der halbe CIL-Code in die vollständige Maschinensprache übersetzt. Dieser Modus wird als normales JIT bezeichnet.

Sie können auch anders herum sagen, dass Sie keine Laufzeitkompilierung wünschen, indem Sie eine vollständig kompilierte EXE-Datei ausführen. Diese Kompilierung erfolgt mit negen.exe. In diesem Szenario nimmt der JIT zur Laufzeit nicht teil. Dies wird als Vor-JIT-Modus bezeichnet.

Wenn Sie sehen möchten, wie sie die Leistung beeinflussen Sie das YouTube-Video sehen, die zeigt, normal JIT und Pre-JIT-Modus der Kompilation:

Explain JIT, Ngen.exe, Pre-jit, Normal-Jit and Econo-Jit.? (.NET interview questions)

Verwandte Themen