Managed Profile Guided Optimization (MPGO)
Eintrag zuletzt aktualisiert am: 14.06.2023
Managed
Profile Guided Optimization (PGO) analysiert das Verhalten von Anwendungen (insbesondere die Reihenfolge der Nutzung von Programmteilen) und optimiert daraufhin den Compiler, sodass der beim Programmstart benötigte Programmcode bevorzugt übersetzt wird und die Anwendung
schneller startet.
Managed
Profile Guided Optimization (MPGO) ist eine Variante des allgemeinen PGA-Verfahren für .NET und für den
Just-in-Time-Compiler.
Microsoft verwendet für die Erstellung der Native Images der
.NET Framework Assemblies schon länger einen Optimierungsprozess, der die Reihenfolge des Programmcodes im Native Image an die tatsächliche Verwendung des Programmcodes anpasst. Diese Managed
Profile Guided Optimization (MPGO) ist ab
.NET 4.5 auch für selbstgeschriebene Assemblies in Form des Werkzeugs mpgo.exe in
Visual Studio Ultimate verfügbar.
Zunächst zeichnet man mit dem Werkzeug Nutzungsdaten einer Anwendung auf:
MPGO -scenario Anwendung.exe -AssembyList meineBibliothek.dll -OutDir C:\temp\Ausgabe\
Nach dem Start der Anwendung sollte eine Reihe repräsentativer Benutzungsszenarien in der Anwendung durchlaufen.
Anschließend muss man die
DLL noch mit dem Native Image Generator (ngen.exe) zu einem Native Image verwandeln und im
Native Image Cache (einem Teil des
GAC) installieren:
ngen.exe install C:\temp\Ausgabe\meineBibliothek.dll
Hinweis: Managed
Profile Guided Optimization (MPGO) darf nicht mit der Parallel JIT Compilation (alias Multi-Core-JIT – MCJ) verwechselt werden. MCJ beschleunigt Anwendungen, die in Intermediate Langu-age vorliegen. MPGO beschleunigt Native Images. Native Images an sich sind tendentiell schneller als Intermediate Language-Assemblies. Daher sollte MPGO in der Regel zu einem besseren Ergebnis führen also MCJ.
Achtung: Microsoft schreibt in der Dokumentation (
http://msdn.microsoft.com/de-de/library/hh873180(v=vs.110).aspx), dass Ngen.exe und Mpgo.exe für
IIS-basierte Serveranwendungen (
ASP.NET und
WCF) nicht empfohlen sind. Mpgo.exe ist zudem nicht möglich für
Windows 8-
Metro-Apps
PGO in .NET Core
Ab Version 1.1 verwendet Microsoft PGO auch für die
.NET Core Runtime-Assemblies.
Verbesserungen in
.NET 6.0:
https://devblogs.microsoft.com/dotnet/conversation-about-pgo/
Standard ab
.NET 8.0:
https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-5/#codegen