Freigeben über


Mpgo.exe (Managed Profile Guided Optimization Tool)

Das Managed Profile Guided Optimization Tool (Mpgo.exe) ist ein Befehlszeilentool, das allgemeine Endbenutzerszenarien verwendet, um die systemeigenen Bildassemblys zu optimieren, die vom Native Image Generator (Ngen.exe) erstellt werden. Mit diesem Tool können Sie Schulungsszenarien ausführen, in denen Profildaten generiert werden. Der Native Image Generator (Ngen.exe) verwendet diese Daten, um seine generierten nativen Imageanwendungsassemblys zu optimieren. Ein Schulungsszenario ist eine Testversion einer erwarteten Verwendung Ihrer Anwendung. Mpgo.exe ist in Visual Studio Ultimate 2012 und höheren Versionen verfügbar. Ab Visual Studio 2013 können Sie auch Mpgo.exe verwenden, um Windows 8.x Store-Apps zu optimieren.

Die profilgesteuerte Optimierung verbessert die Startzeit, die Speicherauslastung (Arbeitssatzgröße) und den Durchsatz, indem Daten aus Schulungsszenarien gesammelt und verwendet werden, um das Layout systemeigener Bilder zu optimieren.

Wenn Leistungsprobleme mit der Startzeit und der Festgelegten Größe für IL-Assemblys (Intermediate Language) auftreten, empfiehlt es sich, zuerst Ngen.exe zu verwenden, um die Kosten für die Just-in-Time-Kompilierung (Just-in-Time, JIT) zu beseitigen und die Codefreigabe zu vereinfachen. Wenn Sie zusätzliche Verbesserungen benötigen, können Sie Mpgo.exe verwenden, um Ihre Anwendung weiter zu optimieren. Sie können die Leistungsdaten aus den nicht optimierten nativen Imageassemblys als Basisplan verwenden, um die Leistungsgewinne zu bewerten. Die Verwendung von Mpgo.exe kann zu schnelleren Kaltstartzeiten und einer kleineren Arbeitssatzgröße führen. Mpgo.exe fügt IL-Assemblys Informationen hinzu, die Ngen.exe zum Erstellen optimierter systemeigener Imageassemblys verwendet. Weitere Informationen finden Sie im Eintrag "Verbessern der Startleistung für Ihre Desktopanwendungen " im .NET-Blog.

Dieses Tool wird automatisch mit Visual Studio installiert. Verwenden Sie zum Ausführen des Tools die Entwickler-Eingabeaufforderung oder Entwickler-PowerShell mit Administratoranmeldeinformationen.

Geben Sie an der Eingabeaufforderung den folgenden Befehl ein:

Für Desktop-Apps:

mpgo -Scenario <command> [-Import <directory>] -AssemblyList <assembly1>  <assembly2> ... -OutDir <directory> [options]

Für Windows 8.x Store-Apps:

mpgo -Scenario <packageName> -AppID <appId> -Timeout <seconds>

Die Parameter

Bei allen Argumenten für Mpgo.exe wird die Groß-/Kleinschreibung nicht beachtet. Befehlen wird ein Gedankenstrich vorangestellt.

Hinweis

Sie können entweder -Scenario oder -Import als erforderlicher Befehl verwenden, aber nicht beides. Wenn Sie die -Reset Option angeben, werden keine der erforderlichen Parameter verwendet.

Erforderlicher Parameter Description
-Scenario < Befehl>

– oder –

-Scenario < packageName>

-oder-

-Import < Verzeichnis>
Geben Sie -Scenario für Desktop-Apps den Befehl an, um die Anwendung auszuführen, die Sie optimieren möchten, einschließlich aller Befehlszeilenargumente. Verwenden Sie drei Doppelte Anführungszeichen um Befehl , wenn sie einen Pfad angibt, der Leerzeichen enthält; Beispiel: mpgo.exe -scenario """C:\My App\myapp.exe""" -assemblylist """C:\My App\myapp.exe""" -outdir "C:\optimized files". Verwenden Sie keine doppelten Anführungszeichen; sie funktionieren nicht ordnungsgemäß, wenn der Befehl Leerzeichen enthält.

-oder-

Geben -Scenario Sie für Windows 8.x Store-Apps das Paket an, für das Sie Profilinformationen generieren möchten. Wenn Sie den Anzeigenamen des Pakets oder den Paketfamiliennamen anstelle des vollständigen Paketnamens angeben, wählt Mpgo.exe das Paket aus, das dem von Ihnen angegebenen Namen entspricht, wenn nur eine Übereinstimmung vorhanden ist. Wenn mehrere Pakete mit dem angegebenen Namen übereinstimmen, werden Sie von Mpgo.exe aufgefordert, ein Paket auszuwählen.

– oder –

Hiermit geben Sie -Import an, dass Optimierungsdaten aus zuvor optimierten Assemblys verwendet werden sollen, um die Assemblys in -AssemblyListzu optimieren. verzeichnis gibt das Verzeichnis an, das die zuvor optimierten Dateien enthält. Die in -AssemblyList oder -AssemblyListFile sind die neuen Versionen der Assemblys, die mithilfe der Daten aus den importierten Dateien optimiert werden sollen. Mithilfe von Optimierungsdaten aus älteren Assemblys können Sie neuere Versionen von Assemblys optimieren, ohne das Szenario erneut auszuführen. Wenn die importierten und Zielassemblys jedoch erheblich unterschiedlichen Code enthalten, sind die Optimierungsdaten unwirksam. Die im -AssemblyList Verzeichnis angegebenen Assemblynamen oder -AssemblyListFile müssen im verzeichnis -Import angegebenen Verzeichnis vorhanden sein. Verwenden Sie drei Anführungszeichen um das Verzeichnis herum, wenn sie einen Pfad angibt, der Leerzeichen enthält.

Sie müssen entweder -Scenario oder -Import, aber nicht beide Parameter angeben.
-OutDir < Verzeichnis> Das Verzeichnis, in dem die optimierten Assemblys platziert werden sollen. Wenn bereits eine Assembly im Ausgabeverzeichnisordner vorhanden ist, wird eine neue Kopie erstellt, und eine Indexnummer wird an den Namen angefügt. Beispiel: Assemblyname-1.exe. Verwenden Sie doppelte Anführungszeichen um das Verzeichnis , wenn sie einen Pfad angibt, der Leerzeichen enthält.
-AssemblyList < assembly1 assembly2 ...>

– oder –

-AssemblyListFile < Datei>
Eine Liste von Assemblys (einschließlich .exe und .dll Dateien), getrennt durch Leerzeichen, zu denen Sie Profilinformationen sammeln möchten. Sie können alle Assemblys im angegebenen oder aktuellen Arbeitsverzeichnis angeben C:\Dir\*.dll oder *.dll auswählen. Weitere Informationen finden Sie im Abschnitt "Hinweise".

– oder –

Eine Textdatei, die die Liste der Assemblys enthält, über die Sie Profilinformationen sammeln möchten, in der eine Assembly pro Zeile aufgeführt ist. Wenn ein Assemblyname mit einem Bindestrich (-) beginnt, verwenden Sie eine Assemblydateiliste, oder benennen Sie die Assembly um.
-AppID < appId> Die ID der Anwendung im angegebenen Paket. Wenn Sie den Platzhalter (*) verwenden, versucht Mpgo.exe, die AppIDs im Paket aufzählen zu lassen und auf < zurückzugreifen>! App, wenn sie fehlschlägt. Wenn Sie eine Zeichenfolge angeben, die einem Ausrufezeichen (!) vorangestellt ist, verkettet Mpgo.exe den Paketfamiliennamen mit dem angegebenen Argument.
-Timeout < Nachschlag> Die Zeitspanne, mit der die Windows 8.x Store-App ausgeführt werden kann, bevor die App beendet wird.
Optionaler Parameter Description
-64bit Instrumente die Baugruppen für 64-Bit-Systeme. Sie müssen diesen Parameter für 64-Bit-Assemblys angeben, auch wenn die Assembly sich selbst als 64-Bit deklariert.
-ExeConfig < Dateiname> Gibt die Konfigurationsdatei an, die Ihr Szenario zum Bereitstellen von Versions- und Ladeprogramminformationen verwendet.
-f Erzwingt die Aufnahme der Profildaten in eine binäre Assembly, auch wenn sie signiert ist. Wenn die Assembly signiert ist, muss sie erneut signiert werden; andernfalls kann die Assembly nicht geladen und ausgeführt werden.
-Reset Setzt die Umgebung zurück, um sicherzustellen, dass sich eine abgebrochene Profilerstellungssitzung nicht auf Ihre Assemblys auswirkt und dann beendet wird. Die Umgebung wird standardmäßig vor und nach einer Profilerstellungssitzung zurückgesetzt.
-Timeout < Zeit in Sekunden> Gibt die Profilerstellungsdauer in Sekunden an. Verwenden Sie einen Wert, der etwas mehr als die beobachteten Startzeiten für GUI-Anwendungen ist. Am Ende des Timeoutzeitraums werden die Profildaten aufgezeichnet, obwohl die Anwendung weiterhin ausgeführt wird. Wenn Sie diese Option nicht festlegen, wird die Profilerstellung bis zum Herunterfahren der Anwendung fortgesetzt, zu dem Zeitpunkt, zu dem die Daten aufgezeichnet werden.
-LeaveNativeImages Gibt an, dass die instrumentierten nativen Images nach dem Ausführen des Szenarios nicht entfernt werden sollen. Diese Option wird in erster Linie verwendet, wenn Sie die Anwendung abrufen, die Sie für das ausgeführte Szenario angegeben haben. Es verhindert die Wiederherstellung von nativen Bildern für nachfolgende Läufe von Mpgo.exe. Wenn Sie die Ausführung der Anwendung abgeschlossen haben, gibt es möglicherweise verwaiste systemeigene Images im Cache, wenn Sie diese Option angeben. Führen Sie in diesem Fall Mpgo.exe mit demselben Szenario und derselben Assemblyliste aus, und verwenden Sie den -RemoveNativeImages Parameter, um diese nativen Images zu entfernen.
-RemoveNativeImages Bereinigt von einer Ausführung, bei der -LeaveNativeImages angegeben wurde. Wenn Sie angeben -RemoveNativeImages, ignoriert Mpgo.exe alle Argumente außer -64bit und -AssemblyListbeendet nach dem Entfernen aller instrumentierten nativen Bilder.

Bemerkungen

Sie können beide -AssemblyList und -AssemblyListFile mehrere Male in der Befehlszeile verwenden.

Wenn Sie beim Angeben von Assemblys keine vollständigen Pfadnamen angeben, sucht Mpgo.exe im aktuellen Verzeichnis. Wenn Sie einen falschen Pfad angeben, zeigt Mpgo.exe eine Fehlermeldung an, generiert aber weiterhin Daten für andere Assemblys. Wenn Sie eine Assembly angeben, die während des Schulungsszenarios nicht geladen wird, werden keine Schulungsdaten für diese Assembly generiert.

Wenn sich eine Assembly in der Liste im globalen Assemblycache befindet, wird sie nicht aktualisiert, um die Profilinformationen zu enthalten. Entfernen Sie ihn aus dem globalen Assemblycache, um Profilinformationen zu sammeln.

Die Verwendung von Ngen.exe und Mpgo.exe wird nur für große verwaltete Anwendungen empfohlen, da der Vorteil von vorkompilierten nativen Images in der Regel nur angezeigt wird, wenn eine signifikante JIT-Kompilierung zur Laufzeit eliminiert wird. Das Ausführen von Mpgo.exe für Anwendungen im Format "Hello World", die nicht arbeitsintensiv sind, bietet keine Vorteile, und Mpgo.exe können sogar keine Profildaten sammeln.

Hinweis

Ngen.exe und Mpgo.exe werden nicht für ASP.NET Anwendungen und WCF-Dienste (Windows Communication Foundation) empfohlen.

So verwenden Sie Mpgo.exe

  1. Verwenden Sie einen Computer, auf dem visual Studio Ultimate 2012 und Ihre Anwendung installiert sind.

  2. Führen Sie Mpgo.exe als Administrator mit den erforderlichen Parametern aus. Im nächsten Abschnitt finden Sie Beispielbefehle.

    Die optimierten Zwischensprachenassemblys (IL) werden im durch den -OutDir Parameter angegebenen Ordner erstellt (in den Beispielen ist dies der C:\Optimized Ordner).

  3. Ersetzen Sie die IL-Assemblys, die Sie für Ngen.exe verwendet haben, durch die neuen IL-Assemblys, die die Profilinformationen aus dem verzeichnis enthalten, das durch -OutDir.

  4. Das Anwendungssetup (mithilfe der von Mpgo.exebereitgestellten Bilder) installiert optimierte systemeigene Images.

Vorgeschlagener Workflow

  1. Erstellen Sie einen Satz optimierter IL-Assemblys mithilfe von Mpgo.exe mit dem -Scenario Parameter.

  2. Überprüfen Sie die optimierten IL-Assemblys in die Quellcodeverwaltung.

  3. Rufen Sie im Buildprozess Mpgo.exe mit dem -Import Parameter als Postbuildschritt auf, um optimierte IL-Images zu generieren, die an Ngen.exeübergeben werden.

Dieser Prozess stellt sicher, dass alle Assemblys Optimierungsdaten aufweisen. Wenn Sie aktualisierte optimierte Assemblys (Schritte 1 und 2) häufiger einchecken, sind die Leistungsnummern während der gesamten Produktentwicklung konsistenter.

Verwenden von Mpgo.exe aus Visual Studio

Sie können Mpgo.exe in Visual Studio ausführen (siehe Artikel How to: Specify Build Events (C#)) with the following restrictions:

  • Pfade mit angestellten Schrägstrichen können nicht verwendet werden, da Visual Studio-Makros standardmäßig auch nachgestellte Schrägstriche verwenden. (Beispielsweise -OutDir "C:\Output Folder\" ist ungültig.) Um diese Einschränkung zu umgehen, können Sie dem nachgestellten Schrägstrich entkommen. (Verwenden Sie -OutDir "$(OutDir)\" z. B. stattdessen.)

  • Standardmäßig befindet sich Mpgo.exe nicht im Visual Studio-Buildpfad. Sie müssen entweder den Pfad zu Visual Studio hinzufügen oder den vollständigen Pfad in der Mpgo-Befehlszeile angeben. Sie können entweder den -Scenario Parameter im -Import Postbuildereignis in Visual Studio verwenden. Der typische Prozess besteht jedoch darin, ein Mal von einer Entwickler-Eingabeaufforderung für Visual Studio zu verwenden -Scenario und dann -Import die optimierten Assemblys nach jedem Build zu aktualisieren, z. B.: "C:\Program Files\Microsoft Visual Studio 11.0\Team Tools\Performance Tools\mpgo.exe" -import "$(OutDir)tmp" -assemblylist "$(TargetPath)" -outdir "$(OutDir)\".

Examples

Der folgende Mpgo.exe Befehl aus einer Entwickler-Eingabeaufforderung für Visual Studio optimiert eine Steueranwendung:

mpgo -scenario "C:\MyApp\MyTax.exe /params par" -AssemblyList Mytax.dll MyTaxUtil2011.dll -OutDir C:\Optimized -TimeOut 15

Der folgende Mpgo.exe Befehl optimiert eine Soundanwendung:

mpgo -scenario "C:\MyApp\wav2wma.exe -input song1.wav -output song1.wma" -AssemblyList transcode.dll -OutDir C:\Optimized -TimeOut 15

Der folgende Mpgo.exe Befehl verwendet Daten aus zuvor optimierten Assemblys, um neuere Versionen der Assemblys zu optimieren:

mpgo.exe -import "C:\Optimized" -assemblylist "C:\MyApp\MyTax.dll" "C:\MyApp\MyTaxUtil2011.dll" -outdir C:\ReOptimized

Siehe auch