Mpgo.exe (Ferramenta de Otimização Orientada de Perfil Gerido)

A Ferramenta de Otimização Orientada de Perfis Geridos (Mpgo.exe) é uma ferramenta de linha de comandos que utiliza cenários comuns do utilizador final para otimizar as assemblagens de imagens nativas criadas pelo Gerador de Imagens Nativo (Ngen.exe). Esta ferramenta permite-lhe executar cenários de preparação que geram dados de perfil. O Gerador de Imagens Nativo (Ngen.exe) utiliza estes dados para otimizar as assemblagens de aplicações de imagem nativa geradas. Um cenário de preparação é uma execução de avaliação de uma utilização esperada da sua aplicação. Mpgo.exe está disponível no Visual Studio Ultimate 2012 e versões posteriores. A partir do Visual Studio 2013, também pode utilizar Mpgo.exe para otimizar as aplicações da Loja Windows 8.x.

A otimização orientada por perfis melhora o tempo de arranque da aplicação, a utilização da memória (tamanho do conjunto de trabalho) e o débito ao recolher dados de cenários de preparação e utilizá-lo para otimizar o esquema de imagens nativas.

Quando se deparar com problemas de desempenho com o tempo de arranque e o tamanho do conjunto de trabalho para assemblagens de Idioma Intermédio (IL), recomendamos que utilize primeiro Ngen.exe para eliminar os custos de compilação just-in-time (JIT) e para facilitar a partilha de código. Se precisar de melhorias adicionais, pode utilizar Mpgo.exe para otimizar ainda mais a sua aplicação. Pode utilizar os dados de desempenho das assemblagens de imagens nativas não otimizadas como uma linha de base para avaliar os ganhos de desempenho. A utilização de Mpgo.exe pode resultar em tempos de arranque mais rápidos e num tamanho de conjunto de trabalho mais pequeno. Mpgo.exe adiciona informações a assemblagens IL que Ngen.exe utiliza para criar assemblagens de imagens nativas otimizadas. Para obter mais informações, veja a entrada Melhorar o Desempenho de Iniciação das Aplicações de Ambiente de Trabalho no blogue .NET.

Esta ferramenta é instalada automaticamente com o Visual Studio. Para executar a ferramenta, utilize a Linha de Comandos do Programador ou o PowerShell do Programador com credenciais de administrador.

Introduza o seguinte comando na linha de comandos:

Para aplicações de ambiente de trabalho:

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

Para aplicações da Loja Windows 8.x:

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

Parâmetros

Todos os argumentos para Mpgo.exe não são sensíveis a maiúsculas e minúsculas. Os comandos têm um prefixo com um travessão.

Nota

Pode utilizar um –Scenario ou –Import como um comando necessário, mas não ambos. Nenhum dos parâmetros necessários é utilizado se especificar a opção –Reset .

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

— ou —

-Scenario<packageName>

-ou-

-Import<diretório>
Para aplicações de ambiente de trabalho, utilize –Scenario para especificar o comando para executar a aplicação que pretende otimizar, incluindo quaisquer argumentos da linha de comandos. Utilize três conjuntos de aspas duplas ao redor do comando se 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 utilize aspas duplas; não funcionarão corretamente se o comando incluir espaços.

-ou-

Para aplicações da Loja Windows 8.x, utilize –Scenario para especificar o pacote para o qual pretende gerar informações de perfil. Se especificar o nome a apresentar do pacote ou o nome da família do pacote em vez do nome completo do pacote, Mpgo.exe irá selecionar o pacote que corresponde ao nome que forneceu se existir apenas uma correspondência. Se vários pacotes corresponderem ao nome especificado, Mpgo.exe irá pedir-lhe para escolher um pacote.

— ou —

Utilize -Import para especificar que os dados de otimização de assemblagens previamente otimizadas devem ser utilizados para otimizar as assemblagens no -AssemblyList. o diretório especifica o diretório que contém os ficheiros otimizados anteriormente. As assemblagens especificadas em –AssemblyList ou –AssemblyListFile são as novas versões das assemblagens a otimizar com os dados dos ficheiros importados. A utilização de dados de otimização da versão mais antiga das assemblagens permite-lhe otimizar versões mais recentes de assemblagens sem voltar a executar o cenário. No entanto, se as assemblagens importadas e de destino incluírem código significativamente diferente, os dados de otimização serão ineficazes. Os nomes de assemblagem especificados em –AssemblyList ou –AssemblyListFile têm de estar presentes no diretório especificado pelo –Importdiretório. Utilize três conjuntos de aspas duplas em torno do diretório se especificar um caminho que inclua espaços.

Tem de especificar ou –Scenario–Import, mas não ambos os parâmetros.
-OutDir<diretório> O diretório no qual colocar as assemblagens otimizadas. Se já existir uma assemblagem na pasta de diretório de saída, é criada uma nova cópia e é acrescentado um número de índice ao respetivo nome; por exemplo: assemblyname-1.exe. Utilize aspas duplas em torno do diretório se especificar um caminho que contenha espaços.
-AssemblyList<assemblagem1 assembl2...>

— ou —

-AssemblyListFile<ficheiro>
Uma lista de assemblagens (incluindo ficheiros .exe e .dll), separadas por espaços, sobre as quais pretende recolher informações de perfil. Pode especificar C:\Dir\*.dll ou *.dll selecionar todas as assemblagens no diretório de trabalho designado ou atual. Consulte a secção Observações para obter mais informações.

— ou —

Um ficheiro de texto que contém a lista de assemblagens sobre as quais pretende recolher informações de perfil, listado uma assemblagem por linha. Se um nome de assemblagem começar com um hífen (-), utilize uma lista de ficheiros de assemblagem ou mude o nome da assemblagem.
-AppID<appId> O ID da aplicação no pacote especificado. Se utilizar o caráter universal (*), Mpgo.exe tentará enumerar os AppIDs no pacote e reverterá para <package_family_name>! Aplicação se falhar. Se especificar uma cadeia com o prefixo de um ponto de exclamação (!), Mpgo.exe irá concatenar o nome da família do pacote com o argumento fornecido.
-Timeout<segundos> O período de tempo para permitir que a aplicação da Loja Windows 8.x seja executada antes de a aplicação sair.
Parâmetro opcional Description
-64bit Instrumenta as assemblagens para sistemas de 64 bits. Tem de especificar este parâmetro para assemblagens de 64 bits, mesmo que a assemblagem se declare como 64 bits.
-ExeConfig<nome do ficheiro> Especifica o ficheiro de configuração que o seu cenário utiliza para fornecer informações sobre a versão e o carregador.
-f Força a inclusão dos dados de perfil numa assemblagem binária, mesmo que sejam assinados. Se a assemblagem estiver assinada, tem de ser novamente assinada; caso contrário, a assemblagem não será carregada e executada.
-Reset Repõe o ambiente para garantir que uma sessão de criação de perfis abortada não afeta as assemblagens e, em seguida, sai. O ambiente é reposto por predefinição antes e depois de uma sessão de criação de perfis.
-Timeout<tempo em segundos> Especifica a duração da criação de perfis em segundos. Utilize um valor ligeiramente superior aos tempos de arranque observados para aplicações GUI. No final do período de tempo limite, os dados do perfil são registados, embora a aplicação continue a ser executada. Se não definir esta opção, a criação de perfis continuará até ao encerramento da aplicação, altura em que os dados serão registados.
-LeaveNativeImages Especifica que as imagens nativas instrumentadas não devem ser removidas depois de executar o cenário. Esta opção é utilizada principalmente quando está a obter a aplicação que especificou para o cenário em execução. Impedirá a recriação de imagens nativas para execuções subsequentes de Mpgo.exe. Quando terminar de executar a aplicação, poderão existir imagens nativas órfãs na cache se especificar esta opção. Neste caso, execute Mpgo.exe com o mesmo cenário e lista de assemblagens e utilize o –RemoveNativeImages parâmetro para remover estas imagens nativas.
-RemoveNativeImages Limpa a partir de uma execução em que –LeaveNativeImages foi especificado. Se especificar -RemoveNativeImages, Mpgo.exe ignora quaisquer argumentos exceto -64bit e –AssemblyList, e sai depois de remover todas as imagens nativas instrumentadas.

Observações

Pode utilizar o –AssemblyList e - AssemblyListFile várias vezes na linha de comandos.

Se não especificar nomes de caminho completos ao especificar assemblagens, Mpgo.exe procura no diretório atual. Se especificar um caminho incorreto, Mpgo.exe apresenta uma mensagem de erro, mas continua a gerar dados para outras assemblagens. Se especificar uma assemblagem que não é carregada durante o cenário de preparação, não são gerados dados de preparação para essa assemblagem.

Se uma assemblagem na lista estiver na cache de assemblagem global, não será atualizada para conter as informações do perfil. Remova-a da cache de assemblagem global para recolher informações de perfil.

A utilização de Ngen.exe e Mpgo.exe é recomendada apenas para aplicações geridas de grandes dimensões, uma vez que o benefício das imagens nativas pré-compiladas é normalmente visto apenas quando elimina uma compilação JIT significativa no tempo de execução. A execução de Mpgo.exe em aplicações de estilo "Hello World" que não estejam a ser intensivas no conjunto de trabalho não proporcionará quaisquer benefícios e Mpgo.exe podem mesmo não conseguir recolher dados de perfil.

Nota

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

Para Utilizar Mpgo.exe

  1. Utilize um computador que tenha o Visual Studio Ultimate 2012 e a sua aplicação instalados.

  2. Execute Mpgo.exe como administrador com os parâmetros necessários. Veja a secção seguinte para obter comandos de exemplo.

    As assemblagens de idioma intermédio (IL) otimizadas são criadas na pasta especificada pelo –OutDir parâmetro (nos exemplos, esta é a C:\Optimized pasta).

  3. Substitua as assemblagens IL que utilizou para Ngen.exe pelas novas assemblagens IL que contêm as informações de perfil do diretório especificado por –OutDir.

  4. A configuração da aplicação (com as imagens fornecidas pelo Mpgo.exe) instalará imagens nativas otimizadas.

Fluxo de Trabalho Sugerido

  1. Crie um conjunto de assemblagens IL otimizadas com Mpgo.exe com o –Scenario parâmetro .

  2. Verifique as assemblagens IL otimizadas no controlo de origem.

  3. No processo de compilação, chame Mpgo.exe com o –Import parâmetro como um passo pós-compilação para gerar imagens IL otimizadas para passar para Ngen.exe.

Este processo garante que todas as assemblagens têm dados de otimização. Se verificar assemblagens otimizadas atualizadas (passos 1 e 2) com mais frequência, os números de desempenho serão mais consistentes ao longo do desenvolvimento do produto.

Utilizar Mpgo.exe do Visual Studio

Pode executar Mpgo.exe a partir do Visual Studio (consulte o artigo Como: Especificar Eventos de Compilação (C#)) com as seguintes restrições:

  • Não pode utilizar caminhos citados com marcas de barra à direita, porque as macros do Visual Studio também utilizam marcas de barra à direita por predefinição. (Por exemplo, –OutDir "C:\Output Folder\" é inválido.) Para contornar esta restrição, pode escapar à barra à direita. (Por exemplo, utilize -OutDir "$(OutDir)\" em vez disso.)

  • Por predefinição, Mpgo.exe não está no caminho de compilação do Visual Studio. Tem de adicionar o caminho ao Visual Studio ou especificar o caminho completo na linha de comandos do Mpgo. Pode utilizar o –Scenario parâmetro ou –Import no evento pós-compilação no Visual Studio. No entanto, o processo típico é utilizar –Scenario uma vez a partir de uma Linha de Comandos do Programador para Visual Studio e, em seguida, utilizar –Import para atualizar as assemblagens otimizadas após cada compilação; 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 a partir de uma Linha de Comandos do Programador para Visual Studio otimiza uma aplicação fiscal:

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

O comando de Mpgo.exe seguinte otimiza uma aplicação de som:

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

O comando Mpgo.exe seguinte utiliza dados de assemblagens otimizadas anteriormente para otimizar versões mais recentes das assemblagens:

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

Ver também