Mpgo.exe (Managed Profile Guided Optimization Tool)
De Managed Profile Guided Optimization Tool (Mpgo.exe) is een opdrachtregelprogramma dat gebruikmaakt van veelvoorkomende scenario's voor eindgebruikers om de systeemeigen installatiekopieassembly's te optimaliseren die zijn gemaakt door de Native Image Generator (Ngen.exe). Met dit hulpprogramma kunt u trainingsscenario's uitvoeren die profielgegevens genereren. De Native Image Generator (Ngen.exe) gebruikt deze gegevens om de gegenereerde systeemeigen installatiekopieën te optimaliseren. Een trainingsscenario is een proefuitvoering van een verwacht gebruik van uw toepassing. Mpgo.exe is beschikbaar in Visual Studio Ultimate 2012 en latere versies. Vanaf Visual Studio 2013 kunt u ook Mpgo.exe gebruiken om Windows 8.x Store-apps te optimaliseren.
Profielgestuurde optimalisatie verbetert de opstarttijd van toepassingen, het geheugengebruik (grootte van de werkset) en de doorvoer door gegevens uit trainingsscenario's te verzamelen en deze te gebruiken om de indeling van systeemeigen installatiekopieën te optimaliseren.
Wanneer u prestatieproblemen ondervindt met opstarttijd en de grootte van de werkset voor IL-assembly's (Intermediate Language), raden we u aan eerst Ngen.exe te gebruiken om JIT-compilatiekosten (Just-In-Time) te elimineren en het delen van code te vergemakkelijken. Als u aanvullende verbeteringen nodig hebt, kunt u Mpgo.exe gebruiken om uw toepassing verder te optimaliseren. U kunt de prestatiegegevens van de niet-geoptimaliseerde systeemeigen installatiekopieën als basislijn gebruiken om de prestatieverbeteringen te evalueren. Het gebruik van Mpgo.exe kan leiden tot snellere koude opstarttijden en een kleinere werkset. Mpgo.exe voegt informatie toe aan IL-assembly's die Ngen.exe gebruikt om geoptimaliseerde systeemeigen installatiekopieën te maken. Zie de vermelding Betere startprestaties voor uw bureaubladtoepassingen in de .NET-blog voor meer informatie.
Dit hulpprogramma wordt automatisch geïnstalleerd met Visual Studio. Als u het hulpprogramma wilt uitvoeren, gebruikt u opdrachtprompt voor ontwikkelaars of Developer PowerShell met beheerdersreferenties.
Voer de volgende opdracht in bij de opdrachtprompt:
Voor bureaublad-apps:
mpgo –Scenario <command> [-Import <directory>] –AssemblyList <assembly1> <assembly2> ... -OutDir <directory> [options]
Voor Windows 8.x Store-apps:
mpgo –Scenario <packageName> -AppID <appId> -Timeout <seconds>
Parameters
Alle argumenten die moeten worden Mpgo.exe, zijn niet hoofdlettergevoelig. Opdrachten worden voorafgegaan door een streepje.
Notitie
U kunt of –Scenario
–Import
gebruiken als een vereiste opdracht, maar niet beide. Geen van de vereiste parameters wordt gebruikt als u de –Reset
optie opgeeft.
Vereiste parameter | Beschrijving |
---|---|
-Scenario <Opdracht>—of— -Scenario <Packagename>-of- -Import <Directory> |
Voor bureaublad-apps gebruikt –Scenario u om de opdracht op te geven om de toepassing uit te voeren die u wilt optimaliseren, inclusief eventuele opdrachtregelargumenten. Gebruik drie sets dubbele aanhalingstekens rond de opdracht als hiermee een pad wordt opgegeven dat spaties bevat; bijvoorbeeld: mpgo.exe -scenario """C:\My App\myapp.exe""" -assemblylist """C:\My App\myapp.exe""" -outdir "C:\optimized files" . Gebruik geen dubbele aanhalingstekens; ze werken niet correct als de opdracht spaties bevat.-of- Voor Windows 8.x Store-apps gebruikt –Scenario u om het pakket op te geven waarvoor u profielgegevens wilt genereren. Als u de weergavenaam van het pakket of de naam van de pakketfamilie opgeeft in plaats van de volledige pakketnaam, selecteert Mpgo.exe het pakket dat overeenkomt met de naam die u hebt opgegeven als er slechts één overeenkomst is. Als meerdere pakketten overeenkomen met de opgegeven naam, wordt u door Mpgo.exe gevraagd een pakket te kiezen.—of— Gebruik -Import om op te geven dat optimalisatiegegevens van eerder geoptimaliseerde assembly's moeten worden gebruikt om de assembly's in -AssemblyList te optimaliseren. map geeft de map die de eerder geoptimaliseerde bestanden bevat. De assembly's die zijn opgegeven in –AssemblyList of –AssemblyListFile zijn de nieuwe versies van de assembly's die moeten worden geoptimaliseerd met behulp van de gegevens uit de geïmporteerde bestanden. Door optimalisatiegegevens uit oudere versies van assembly's te gebruiken, kunt u nieuwere versies van assembly's optimaliseren zonder het scenario opnieuw uit te voeren. Als de geïmporteerde en doelassembly's echter aanzienlijk verschillende code bevatten, zijn de optimalisatiegegevens niet effectief. De assemblynamen die zijn opgegeven in –AssemblyList of –AssemblyListFile moeten aanwezig zijn in de map die is opgegeven door –Import de map. Gebruik drie sets dubbele aanhalingstekens rond de map als hiermee een pad wordt opgegeven dat spaties bevat.U moet of –Scenario –Import opgeven, maar niet beide parameters. |
-OutDir <Directory> |
De map waarin u de geoptimaliseerde assembly's wilt plaatsen. Als er al een assembly in de map van de uitvoermap bestaat, wordt er een nieuwe kopie gemaakt en wordt een indexnummer toegevoegd aan de naam; bijvoorbeeld: assemblyname-1.exe. Gebruik dubbele aanhalingstekens rond de map als hiermee een pad met spaties wordt opgegeven. |
-AssemblyList <assembly1 assembly2 ...>—of— -AssemblyListFile <Bestand> |
Een lijst met assembly's (inclusief .exe- en .dll-bestanden), gescheiden door spaties, waarover u profielgegevens wilt verzamelen. U kunt of opgeven C:\Dir\*.dll om *.dll alle assembly's in de aangewezen of huidige werkmap te selecteren. Zie de sectie Opmerkingen voor meer informatie.—of— Een tekstbestand met de lijst met assembly's waarover u profielgegevens wilt verzamelen, met één assembly per regel. Als de naam van een assembly begint met een afbreekstreepje (-), gebruikt u een assemblybestandslijst of wijzigt u de naam van de assembly. |
-AppID <Appid> |
De id van de toepassing in het opgegeven pakket. Als u het jokerteken (*) gebruikt, probeert Mpgo.exe de AppID's in het pakket op te sommen en valt terug op <package_family_name>! App als deze mislukt. Als u een tekenreeks opgeeft die wordt voorafgegaan door een uitroepteken (!), voegt Mpgo.exe de naam van de pakketfamilie samen met het opgegeven argument. |
-Timeout <Seconden> |
De hoeveelheid tijd die de Windows 8.x Store-app moet uitvoeren voordat de app wordt afgesloten. |
Optionele parameter | Beschrijving |
---|---|
-64bit |
Instrumentatie van de assembly's voor 64-bits systemen. U moet deze parameter opgeven voor 64-bits assembly's, zelfs als uw assembly zichzelf declareert als 64-bits. |
-ExeConfig <Bestandsnaam> |
Hiermee geeft u het configuratiebestand op dat in uw scenario wordt gebruikt om versie- en laadprogrammagegevens op te geven. |
-f |
Dwingt de opname van de profielgegevens in een binaire assembly af, zelfs als deze zijn ondertekend. Als de assembly is ondertekend, moet deze opnieuw worden ondertekend; anders kan de assembly niet worden geladen en uitgevoerd. |
-Reset |
Stelt de omgeving opnieuw in om ervoor te zorgen dat een afgebroken profileringssessie geen invloed heeft op uw assembly's en wordt vervolgens afgesloten. De omgeving wordt standaard opnieuw ingesteld voor en na een profileringssessie. |
-Timeout <tijd in seconden> |
Hiermee geeft u de profileringsduur in seconden op. Gebruik een waarde die iets groter is dan de waargenomen opstarttijden voor GUI-toepassingen. Aan het einde van de time-outperiode worden de profielgegevens vastgelegd, hoewel de toepassing nog steeds wordt uitgevoerd. Als u deze optie niet instelt, wordt de profilering voortgezet totdat de toepassing wordt afgesloten. Op dat moment worden de gegevens vastgelegd. |
-LeaveNativeImages |
Hiermee geeft u op dat de geïnstrueerde systeemeigen installatiekopieën niet moeten worden verwijderd na het uitvoeren van het scenario. Deze optie wordt voornamelijk gebruikt wanneer u de toepassing ophaalt die u hebt opgegeven voor het scenario dat wordt uitgevoerd. Hiermee wordt voorkomen dat systeemeigen installatiekopieën opnieuw worden weergegeven voor volgende uitvoeringen van Mpgo.exe. Wanneer u klaar bent met het uitvoeren van uw toepassing, zijn er mogelijk zwevende systeemeigen installatiekopieën in de cache als u deze optie opgeeft. In dit geval voert u Mpgo.exe uit met hetzelfde scenario en dezelfde assemblylijst en gebruikt u de –RemoveNativeImages parameter om deze systeemeigen installatiekopieën te verwijderen. |
-RemoveNativeImages |
Opgeschoond van een uitvoering waarbij –LeaveNativeImages is opgegeven. Als u opgeeft -RemoveNativeImages , worden Mpgo.exe alle argumenten genegeerd, behalve -64bit en –AssemblyList , en wordt afgesloten nadat alle geïnstrumenteerde systeemeigen installatiekopieën zijn verwijderd. |
Opmerkingen
U kunt zowel als –AssemblyList
- AssemblyListFile
meerdere keren op de opdrachtregel gebruiken.
Als u bij het opgeven van assembly's geen volledige padnamen opgeeft, zoekt Mpgo.exe in de huidige map. Als u een onjuist pad opgeeft, wordt Mpgo.exe een foutbericht weergegeven, maar blijft gegevens genereren voor andere assembly's. Als u een assembly opgeeft die niet wordt geladen tijdens het trainingsscenario, worden er geen trainingsgegevens gegenereerd voor die assembly.
Als een assembly in de lijst zich in de globale assemblycache bevindt, wordt deze niet bijgewerkt met de profielgegevens. Verwijder deze uit de global assembly-cache om profielgegevens te verzamelen.
Het gebruik van Ngen.exe en Mpgo.exe wordt alleen aanbevolen voor grote beheerde toepassingen, omdat het voordeel van vooraf gecompileerde systeemeigen installatiekopieën doorgaans alleen wordt gezien wanneer aanzienlijke JIT-compilatie tijdens runtime wordt geëlimineerd. Het uitvoeren van Mpgo.exe op 'Hallo wereld'-toepassingen die niet intensief werken, biedt geen voordelen en Mpgo.exe kunnen zelfs geen profielgegevens verzamelen.
Notitie
Ngen.exe en Mpgo.exe worden niet aanbevolen voor ASP.NET-toepassingen en WCF-services (Windows Communication Foundation).
Mpgo.exe gebruiken
Gebruik een computer waarop Visual Studio Ultimate 2012 en uw toepassing is geïnstalleerd.
Voer Mpgo.exe uit als beheerder met de benodigde parameters. Zie de volgende sectie voor voorbeeldopdrachten.
De geoptimaliseerde tussenliggende taalassembly's (IL) worden gemaakt in de map die is opgegeven met de
–OutDir
parameter (in de voorbeelden is dit deC:\Optimized
map).Vervang de IL-assembly's die u hebt gebruikt voor Ngen.exe door de nieuwe IL-assembly's die de profielgegevens bevatten uit de map die is opgegeven door
–OutDir
.Met de installatie van de toepassing (met behulp van de installatiekopieën van Mpgo.exe) worden geoptimaliseerde systeemeigen installatiekopieën geïnstalleerd.
Voorgestelde werkstroom
Maak een set geoptimaliseerde IL-assembly's met behulp van Mpgo.exe met de
–Scenario
parameter .Controleer de geoptimaliseerde IL-assembly's in broncodebeheer.
Roep in het buildproces Mpgo.exe aan met de
–Import
parameter als een post-build-stap om geoptimaliseerde IL-installatiekopieën te genereren die worden doorgegeven aan Ngen.exe.
Dit proces zorgt ervoor dat alle assembly's optimalisatiegegevens hebben. Als u bijgewerkte geoptimaliseerde assembly's (stap 1 en 2) vaker incheckt, zijn de prestatienummers consistenter tijdens de productontwikkeling.
Mpgo.exe van Visual Studio gebruiken
U kunt Mpgo.exe uitvoeren vanuit Visual Studio (zie het artikel Procedure: Build-gebeurtenissen opgeven (C#)) met de volgende beperkingen:
U kunt geen paden met aanhalingstekens met afsluitende slash-markeringen gebruiken, omdat Visual Studio-macro's ook standaard slash-markeringen gebruiken. (Is bijvoorbeeld
–OutDir "C:\Output Folder\"
ongeldig.) Als u deze beperking wilt omzeilen, kunt u de afsluitende slash omzeilen. (Gebruik-OutDir "$(OutDir)\"
bijvoorbeeld in plaats daarvan.)Standaard bevindt Mpgo.exe zich niet in het buildpad van Visual Studio. U moet het pad naar Visual Studio toevoegen of het volledige pad opgeven op de Mpgo-opdrachtregel. U kunt de
–Scenario
parameter of–Import
gebruiken in de gebeurtenis na de build in Visual Studio. Het gebruikelijke proces is echter om één keer te gebruiken–Scenario
vanaf een opdrachtprompt voor ontwikkelaars voor Visual Studio en vervolgens te gebruiken–Import
om de geoptimaliseerde assembly's na elke build bij te werken, bijvoorbeeld:"C:\Program Files\Microsoft Visual Studio 11.0\Team Tools\Performance Tools\mpgo.exe" -import "$(OutDir)tmp" -assemblylist "$(TargetPath)" -outdir "$(OutDir)\"
.
Voorbeelden
Met de volgende Mpgo.exe opdracht van een opdrachtprompt voor ontwikkelaars voor Visual Studio wordt een belastingtoepassing geoptimaliseerd:
mpgo –scenario "C:\MyApp\MyTax.exe /params par" –AssemblyList Mytax.dll MyTaxUtil2011.dll –OutDir C:\Optimized –TimeOut 15
Met de volgende Mpgo.exe opdracht wordt een geluidstoepassing geoptimaliseerd:
mpgo –scenario "C:\MyApp\wav2wma.exe –input song1.wav –output song1.wma" –AssemblyList transcode.dll –OutDir C:\Optimized –TimeOut 15
De volgende Mpgo.exe opdracht gebruikt gegevens van eerder geoptimaliseerde assembly's om nieuwere versies van de assembly's te optimaliseren:
mpgo.exe -import "C:\Optimized" -assemblylist "C:\MyApp\MyTax.dll" "C:\MyApp\MyTaxUtil2011.dll" -outdir C:\ReOptimized