Compartilhar via


Mpgo.exe (Ferramenta de Otimização Guiada de Perfil Gerenciado)

A Ferramenta de Otimização Guiada de Perfil Gerenciado (Mpgo.exe) é uma ferramenta de linha de comando que usa cenários comuns do usuário final para otimizar os assemblies de imagem nativa criados pelo Gerador de Imagem Nativa (Ngen.exe). Essa ferramenta permite que você execute cenários de treinamento que geram dados de perfil. O Gerador de Imagem Nativa (Ngen.exe) usa esses dados para otimizar seus assemblies de aplicativo de imagem nativa gerados. Um cenário de treinamento é uma execução de avaliação de um uso esperado do aplicativo. Mpgo.exe está disponível no Visual Studio Ultimate 2012 e versões posteriores. A partir do Visual Studio 2013, você também pode usar Mpgo.exe para otimizar aplicativos da Windows 8.x Store.

A otimização guiada por perfil melhora o tempo de inicialização do aplicativo, a utilização da memória (tamanho do conjunto de trabalho) e a taxa de transferência coletando dados de cenários de treinamento e usando-os para otimizar o layout de imagens nativas.

Quando você encontra problemas de desempenho com o tempo de inicialização e o tamanho do conjunto de trabalho para assemblies il (linguagem intermediária), recomendamos que você primeiro use Ngen.exe para eliminar os custos de compilação just-in-time (JIT) e facilitar o compartilhamento de código. Se você precisar de melhorias adicionais, poderá usar Mpgo.exe para otimizar ainda mais seu aplicativo. Você pode usar os dados de desempenho dos assemblies de imagem nativa não otimizados como uma linha de base para avaliar os ganhos de desempenho. Usar Mpgo.exe pode resultar em tempos de inicialização frios mais rápidos e um tamanho menor do conjunto de trabalho. Mpgo.exe adiciona informações a assemblies IL que Ngen.exe usa para criar assemblies de imagem nativa otimizados. Para obter mais informações, consulte a entrada Aprimorando o desempenho de inicialização para seus aplicativos da área de trabalho no blog do .NET.

Essa ferramenta é instalada automaticamente com o Visual Studio. Para executar a ferramenta, use o Prompt de Comando do Desenvolvedor ou o PowerShell do Desenvolvedor com credenciais de administrador.

Insira o seguinte comando no prompt de comando:

Para aplicativos da área de trabalho:

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

Para aplicativos da Windows 8.x Store:

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

Parâmetros

Todos os argumentos para Mpgo.exe não diferenciam maiúsculas de minúsculas. Os comandos são prefixados com um traço.

Observação

Você pode usar ou -Scenario-Import como um comando necessário, mas não ambos. Nenhum dos parâmetros necessários será usado se você especificar a opção -Reset .

Parâmetro necessário Description
-Scenario < comando>

— ou—

-Scenario < packageName>

- ou -

-Import < diretório>
Para aplicativos da área de trabalho, use -Scenario para especificar o comando para executar o aplicativo que você deseja otimizar, incluindo quaisquer argumentos de linha de comando. Use três conjuntos de aspas duplas em torno do comando se ele especificar um caminho que inclua espaços; por exemplo: mpgo.exe -scenario """C:\My App\myapp.exe""" -assemblylist """C:\My App\myapp.exe""" -outdir "C:\optimized files". Não use aspas duplas; eles não funcionarão corretamente se o comando incluir espaços.

- ou -

Para aplicativos da Windows 8.x Store, use -Scenario para especificar o pacote para o qual você deseja gerar informações de perfil. Se você especificar o nome de exibição do pacote ou o nome da família de pacotes em vez do nome completo do pacote, Mpgo.exe selecionará o pacote que corresponde ao nome fornecido se houver apenas uma correspondência. Se vários pacotes corresponderem ao nome especificado, Mpgo.exe solicitará que você escolha um pacote.

— ou—

Use -Import para especificar que os dados de otimização de assemblies otimizados anteriormente devem ser usados para otimizar os assemblies em -AssemblyList. O diretório especifica o diretório que contém os arquivos otimizados anteriormente. Os assemblies especificados em -AssemblyList ou -AssemblyListFile são as novas versões dos assemblies a serem otimizados usando os dados dos arquivos importados. O uso de dados de otimização da versão mais antiga de assemblies permite otimizar versões mais recentes de assemblies sem executar novamente o cenário. No entanto, se os assemblies importados e de destino incluirem um código significativamente diferente, os dados de otimização serão ineficazes. Os nomes de assembly especificados ou -AssemblyList-AssemblyListFile devem estar presentes no diretório especificado pelo -Importdiretório. Use três conjuntos de aspas duplas em torno do diretório se ele especificar um caminho que inclua espaços.

Você deve especificar um -Scenario ou -Import, mas não ambos os parâmetros.
-OutDir < diretório> O diretório no qual colocar os assemblies otimizados. Se já existir um assembly na pasta de diretório de saída, uma nova cópia será criada e um número de índice será acrescentado ao seu nome; por exemplo: assemblyname-1.exe. Use aspas duplas ao redor do diretório se ele especificar um caminho que contenha espaços.
-AssemblyList < assembly1 assembly2...>

— ou—

-AssemblyListFile < arquivo>
Uma lista de assemblies (incluindo arquivos .exe e .dll), separados por espaços, sobre os quais você deseja coletar informações de perfil. Você pode especificar C:\Dir\*.dll ou *.dll selecionar todos os assemblies no diretório de trabalho designado ou atual. Consulte a seção Comentários para obter mais informações.

— ou—

Um arquivo de texto que contém a lista de assemblies sobre os quais você deseja coletar informações de perfil, listou um assembly por linha. Se um nome de assembly começar com um hífen (-), use uma lista de arquivos de assembly ou renomeie o assembly.
-AppID < appId> A ID do aplicativo no pacote especificado. Se você usar o curinga (*), Mpgo.exe tentará enumerar os AppIDs no pacote e retornará ao <package_family_name>! Aplicativo se ele falhar. Se você especificar uma cadeia de caracteres prefixada por um ponto de exclamação (!), Mpgo.exe concatenará o nome da família de pacotes com o argumento fornecido.
-Timeout < Segundos> A quantidade de tempo para permitir que o aplicativo da Windows 8.x Store seja executado antes que o aplicativo seja encerrado.
Parâmetro opcional Description
-64bit Instrumenta os assemblies para sistemas de 64 bits. Você deve especificar esse parâmetro para assemblies de 64 bits, mesmo que o assembly se declare como de 64 bits.
-ExeConfig < Filename> Especifica o arquivo de configuração que seu cenário usa para fornecer informações de versão e carregador.
-f Força a inclusão dos dados de perfil em um assembly binário, mesmo que sejam assinados. Se o assembly estiver assinado, ele deverá ser assinado novamente; caso contrário, o assembly falhará ao carregar e executar.
-Reset Redefine o ambiente para garantir que uma sessão de criação de perfil anulada não afete seus assemblies e, em seguida, desista. O ambiente é redefinido por padrão antes e depois de uma sessão de criação de perfil.
-Timeout < tempo em segundos> Especifica a duração da criação de perfil em segundos. Use um valor um pouco mais do que os tempos de inicialização observados para aplicativos de GUI. No final do período de tempo limite, os dados do perfil são registrados, embora o aplicativo continue sendo executado. Se você não definir essa opção, a criação de perfil continuará até o desligamento do aplicativo, momento em que os dados serão registrados.
-LeaveNativeImages Especifica que as imagens nativas instrumentadas não devem ser removidas após a execução do cenário. Essa opção é usada principalmente quando você está recebendo o aplicativo especificado para o cenário em execução. Isso impedirá a recriação de imagens nativas para execuções subsequentes de Mpgo.exe. Quando você terminar de executar seu aplicativo, poderá haver imagens nativas órfãs no cache se você especificar essa opção. Nesse caso, execute Mpgo.exe com o mesmo cenário e lista de assembly e use o -RemoveNativeImages parâmetro para remover essas imagens nativas.
-RemoveNativeImages Limpa de uma execução em que -LeaveNativeImages foi especificado. Se você especificar -RemoveNativeImages, Mpgo.exe ignorará os argumentos exceto -64bit e -AssemblyListsairá depois de remover todas as imagens nativas instrumentadas.

Observações

Você pode usar as duas -AssemblyList e -AssemblyListFile várias vezes na linha de comando.

Se você não especificar nomes de caminho completos ao especificar assemblies, Mpgo.exe procurará no diretório atual. Se você especificar um caminho incorreto, Mpgo.exe exibirá uma mensagem de erro, mas continuará gerando dados para outros assemblies. Se você especificar um assembly que não é carregado durante o cenário de treinamento, nenhum dado de treinamento será gerado para esse assembly.

Se um assembly na lista estiver no cache de assembly global, ele não será atualizado para conter as informações do perfil. Remova-o do cache de assembly global para coletar informações de perfil.

O uso de Ngen.exe e Mpgo.exe é recomendado apenas para aplicativos gerenciados grandes, pois o benefício de imagens nativas pré-compilados normalmente é visto apenas quando elimina uma compilação JIT significativa em runtime. A execução de Mpgo.exe em aplicativos de estilo "Olá, Mundo" que não são intensivos no conjunto de trabalho não fornecerá nenhum benefício, e Mpgo.exe pode até mesmo não coletar dados de perfil.

Observação

Ngen.exe e Mpgo.exe não são recomendados para aplicativos ASP.NET e serviços do WCF (Windows Communication Foundation).

Para usar Mpgo.exe

  1. Use um computador que tenha o Visual Studio Ultimate 2012 e seu aplicativo instalados.

  2. Execute Mpgo.exe como administrador com os parâmetros necessários. Consulte a próxima seção para obter comandos de exemplo.

    Os assemblies il (linguagem intermediária) otimizados são criados na pasta especificada pelo -OutDir parâmetro (nos exemplos, esta é a C:\Optimized pasta).

  3. Substitua os assemblies IL usados para Ngen.exe pelos novos assemblies IL que contêm as informações de perfil do diretório especificado por -OutDir.

  4. A configuração do aplicativo (usando as imagens fornecidas pelo Mpgo.exe) instalará imagens nativas otimizadas.

Fluxo de trabalho sugerido

  1. Crie um conjunto de assemblies IL otimizados usando Mpgo.exe com o -Scenario parâmetro.

  2. Verifique os assemblies il otimizados no controle do código-fonte.

  3. No processo de build, chame Mpgo.exe com o -Import parâmetro como uma etapa pós-build para gerar imagens IL otimizadas para passar para Ngen.exe.

Esse processo garante que todos os assemblies tenham dados de otimização. Se você fizer check-in de assemblies otimizados atualizados (etapas 1 e 2) com mais frequência, os números de desempenho serão mais consistentes em todo o desenvolvimento do produto.

Usando Mpgo.exe do Visual Studio

Você pode executar Mpgo.exe no Visual Studio (consulte o artigo Como especificar eventos de build (C#)) com as seguintes restrições:

  • Você não pode usar caminhos entre aspas com marcas de barra à direita, pois as macros do Visual Studio também usam marcas de barra à direita por padrão. (Por exemplo, -OutDir "C:\Output Folder\" é inválido.) Para contornar essa restrição, você pode escapar da barra à direita. (Por exemplo, use -OutDir "$(OutDir)\" em vez disso.)

  • Por padrão, Mpgo.exe não está no caminho de build do Visual Studio. Você deve adicionar o caminho ao Visual Studio ou especificar o caminho completo na linha de comando do Mpgo. Você pode usar o parâmetro ou o -Scenario-Import parâmetro no evento pós-build no Visual Studio. No entanto, o processo típico é usar -Scenario uma vez de um Prompt de Comando do Desenvolvedor para Visual Studio e, em seguida, usar -Import para atualizar os assemblies otimizados após cada build; por exemplo: "C:\Program Files\Microsoft Visual Studio 11.0\Team Tools\Performance Tools\mpgo.exe" -import "$(OutDir)tmp" -assemblylist "$(TargetPath)" -outdir "$(OutDir)\".

Exemplos

O seguinte comando Mpgo.exe de um Prompt de Comando do Desenvolvedor para Visual Studio otimiza um aplicativo fiscal:

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

O seguinte comando Mpgo.exe otimiza um aplicativo de som:

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

O seguinte comando Mpgo.exe usa dados de assemblies otimizados anteriormente para otimizar versões mais recentes dos assemblies:

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

Consulte também