Mpgo.exe (управляемое средство профильной оптимизации)

Управляемое средство профильной оптимизации (Mpgo.exe) — это программа командной строки, которая использует общие пользовательские сценарии для оптимизации сборок машинных образов, созданных Генератором машинных образов (Ngen.exe). Это средство позволяет выполнять обучающие сценарии, которые создают данные профиля. Генератор машинных образов (Ngen.exe) использует эти данные для оптимизации создаваемых сборок приложений с машинными образами. Обучающий сценарий — это пробный сеанс предполагаемого использования приложения. Средство Mpgo.exe доступно в Visual Studio Ultimate 2012 и более поздних версий. Начиная с Visual Studio 2013, для оптимизации приложений Магазина Windows 8.x также можно использовать Mpgo.exe.

Средство профильной оптимизации собирает данные из обучающих сценариев и с их помощью оптимизирует макет машинных образов. Это позволяет сократить время запуска приложения, уменьшить объем используемой памяти (размер рабочего набора) и повысить пропускную способность.

При возникновении ошибок производительности, связанных с временем запуска и размером рабочего набора IL-сборок, рекомендуется сначала применить Ngen.exe, чтобы исключить расходы на JIT-компиляцию и создать возможность совместного использования кода. Затем можно оптимизировать приложение с помощью средства Mpgo.exe. Данные о производительности неоптимизированных сборок машинных образов можно использовать в качестве базовых показателей при оценке прироста производительности. Оптимизация с помощью средства Mpgo.exe, возможно, позволит сократить время холодного запуска и размер рабочего набора. Mpgo.exe добавляет информацию в IL-сборки, которые используются программой Ngen.exe для создания оптимизированных сборок машинных образов. Дополнительные сведения см. в статье Повышение производительности при запуске классических приложений в блоге .NET.

Эта программа автоматически устанавливается вместе с Visual Studio. Для запуска этого средства используйте Командную строку разработчика или PowerShell для разработчиков с учетными данными администратора.

Введите следующую команду в командной строке:

Для классических приложений:

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

Для приложений Магазина Windows 8.x:

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

Параметры

В аргументах средства Mpgo.exe не учитывается регистр. Перед командами ставится тире.

Примечание

Необходимо указывать одну из обязательных команд –Scenario или –Import, но не обе команды одновременно. Если задан параметр –Reset, обязательные параметры не используются.

Обязательный параметр Описание
-Scenario<Команды>

—или—

-Scenario<packageName>

-или-

-Import<Каталог>
Для классических приложений параметр –Scenario позволяет задать команду для запуска оптимизируемого приложения со всеми аргументами командной строки. Заключите командуmpgo.exe -scenario """C:\My App\myapp.exe""" -assemblylist """C:\My App\myapp.exe""" -outdir "C:\optimized files" в три пары двойных кавычек, если указанный в ней путь содержит пробелы, например . Если заключить команду, содержащую пробелы, в одну пару двойных кавычек, при выполнении произойдет сбой.

-или-

Для приложений Магазина Windows 8.x параметр –Scenario позволяет задать пакет, для которого создаются сведения профиля. Если вместо полного имени пакета указать отображаемое имя пакета или имя семейства пакетов, средство Mpgo.exe выберет пакет с указанным именем — при условии, что он всего один. Если пакетов с таким именем несколько, Mpgo.exe предложит выбрать пакет.

—или—

Параметр -Import позволяет указать, что для оптимизации сборок в -AssemblyList следует использовать данные для оптимизации из ранее оптимизированных сборок. Аргумент directory задает каталог, содержащий ранее оптимизированные файлы. Сборки, указанные в –AssemblyList или –AssemblyListFile — это новые версии сборок, которые требуется оптимизировать при помощи данных из импортированных файлов. Используя данные для оптимизации из более старой версии сборок, можно оптимизировать более новые версии сборок без повторного выполнения сценария. Однако если код импортированных и целевых сборок значительно отличается, оптимизация на основе этих данных будет неэффективной. Имена сборок, указанные в –AssemblyList или –AssemblyListFile, должны присутствовать в каталоге, указанном в параметре –Importdirectory. Заключите directory в три пары двойных кавычек, если указанный в нем путь содержит пробелы.

Необходимо задать либо параметр –Scenario, либо параметр –Import, но не оба параметра одновременно.
-OutDir<Каталог> Каталог, в котором следует разместить оптимизированные сборки. Если сборка уже существует в папке выходного каталога, создается ее копия и к ее имени добавляется индекс. Пример: имя_сборки-1.exe. Заключите directory в двойные кавычки, если указанный в нем путь содержит пробелы.
-AssemblyList<assembly1 assembly2 ...>

—или—

-AssemblyListFile<Файл>
Список сборок (включая файлы EXE и DLL), разделенных пробелами, для которых требуется собрать сведения профиля. Можно указать C:\Dir\*.dll или *.dll, чтобы выбрать все сборки в заданном или текущем рабочем каталоге. Дополнительные сведения см. в разделе "Примечания".

—или—

Текстовый файл, содержащий список сборок, для которых требуется собрать сведения профиля. В каждой строке указывается одна сборка. Если имя сборки начинается с дефиса (-), используйте список файлов сборок или переименуйте сборку.
-AppID<Appid> Идентификатор приложения в заданном пакете. Если вы используете подстановочный знак (*), Mpgo.exe попытается перечислить идентификаторы AppID в пакете и вернется к <package_family_name>! Приложение в случае сбоя. Если указать строку, которая начинается с восклицательного знака (!), Mpgo.exe сцепляет имя семейства пакетов с заданным аргументом.
-Timeout<Секунд> Время выполнения приложения Магазина Windows 8.x до завершения работы.
Необязательный параметр Описание
-64bit Инструментирует сборки для 64-разрядных систем. Необходимо указать этот параметр для 64-разрядных сборок, даже если сборка объявляется как 64-разрядная.
-ExeConfig<Имени файла> Задает файл конфигурации, используемый сценарием для предоставления сведений о версии и загрузчике.
-f Принудительно включает данные профиля в двоичную сборку, даже если она подписана. Если сборка подписана, ее необходимо заново подписать. В противном случае сборку не удастся загрузить и выполнить.
-Reset Сбрасывает параметры среды, чтобы прерванный сеанс профилирования не повлиял на сборки, и завершает работу. Параметры среды сбрасываются по умолчанию до и после сеанса профилирования.
-Timeout<время в секундах> Задает длительность профилирования в секундах. Используйте значение, немного превышающее наблюдаемое время запуска приложений графического пользовательского интерфейса. В конце времени ожидания записываются данные профиля, хотя приложение продолжает выполняться. Если этот параметр не задан, профилирование продолжится до завершения работы приложения и в это время будут записаны данные.
-LeaveNativeImages Указывает, что после выполнения сценария не следует удалять инструментированные машинные образы. Этот параметр используется, как правило, в тех случаях, когда требуется получить указанное в выполняемом сценарии приложение. Он предотвращает повторное создание машинных образов при последующих запусках Mpgo.exe. Если задать этот параметр, после завершения работы приложения в кэше могут оставаться потерянные машинные образы. Чтобы их удалить, запустите Mpgo.exe с тем же сценарием и списком сборок и укажите параметр –RemoveNativeImages.
-RemoveNativeImages Очищает запуск, в котором указан параметр –LeaveNativeImages. Если задан параметр -RemoveNativeImages, средство Mpgo.exe игнорирует все аргументы, кроме -64bit и –AssemblyList, и завершает работу после удаления всех инструментированных образов в машинном коде.

Примечания

Как параметр –AssemblyList, так и параметр - AssemblyListFile можно указывать в командной строке несколько раз.

Если при задании сборок не указан полный путь, Mpgo.exe выполняет поиск в текущем каталоге. Если указан неверный путь, Mpgo.exe отображает сообщение об ошибке, но продолжает создавать данные для других сборок. Если указана сборка, которая не загружается во время обучающего сценария, обучающие данные для нее не создаются.

Если в списке указана сборка, которая находится в глобальном кэше сборок, в нее не будут добавлены сведения профиля. Чтобы сведения профиля собирались, удалите ее из глобального кэша сборок.

Средства Ngen.exe и Mpgo.exe рекомендуется использовать только для больших управляемых приложений, где применение предварительно скомпилированных машинных образов позволит избежать продолжительной JIT-компиляции во время выполнения. Использовать средство Mpgo.exe для приложений типа "Hello World", не имеющих значительного рабочего набора, не имеет смысла. Возможно, что Mpgo.exe не соберет данные профиля.

Примечание

Средства Ngen.exe и Mpgo.exe не рекомендуется использовать для приложений ASP.NET и служб Windows Communication Foundation (WCF).

Использование Mpgo.exe

  1. Приложение должно быть установлено на компьютере с Visual Studio Ultimate 2012.

  2. Запустите Mpgo.exe с правами администратора, указав необходимые параметры. Примеры команд см. в следующем разделе.

    Оптимизированные IL-сборки создаются в папке, заданной параметром –OutDir (в примерах это папка C:\Optimized).

  3. Замените сборки IL, используемые для Ngen.exe, новыми сборками IL, содержащими сведения о профиле из каталога, указанного параметром –OutDir.

  4. При настройке приложения (с помощью образов, предоставленных Mpgo.exe) будут установлены оптимизированные машинные образы.

Предлагаемый рабочий процесс

  1. Создайте набор оптимизированных IL-сборок, используя средство Mpgo.exe с параметром –Scenario.

  2. Проверьте оптимизированные IL-сборки в системе управления версиями.

  3. После выполнения сборки вызовите Mpgo.exe с параметром –Import, чтобы создать оптимизированные IL-образы, передаваемые в Ngen.exe.

Этот процесс гарантирует, что все сборки будут содержать данные для оптимизации. Если возвращать обновленные оптимизированные сборки (шаг 1 и 2) чаще, продукт будет иметь более стабильные показатели производительности при разработке.

Запуск Mpgo.exe в Visual Studio

Можно выполнять Mpgo.exe в Visual Studio (см. статью Практическое руководство. Указание событий сборки (C#)) со следующими ограничениями:

  • Нельзя использовать заключенные в кавычки пути с обратными косыми чертами, поскольку они по умолчанию они используются в макросах Visual Studio. (Например, –OutDir "C:\Output Folder\" является недопустимым.) Чтобы обойти это ограничение, используйте альтернативную запись. (Например, используйте -OutDir "$(OutDir)\".)

  • По умолчанию Mpgo.exe не находится на пути сборки Visual Studio. Необходимо либо добавить путь в Visual Studio, либо указать полный путь в командной строке средства. В Visual Studio в событиях после сборки можно использовать как параметр –Scenario, так и параметр –Import. Однако типичный процесс — использовать –Scenario один раз из командной строки разработчика для Visual Studio, а затем использовать для –Import обновления оптимизированных сборок после каждой сборки, например "C:\Program Files\Microsoft Visual Studio 11.0\Team Tools\Performance Tools\mpgo.exe" -import "$(OutDir)tmp" -assemblylist "$(TargetPath)" -outdir "$(OutDir)\": .

Примеры

Следующая команда Mpgo.exe в командной строке разработчика для Visual Studio оптимизирует приложение для подсчета налогов:

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

Следующая команда Mpgo.exe оптимизирует звуковое приложение:

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

Следующая команда Mpgo.exe использует данные из ранее оптимизированных сборок для оптимизации более новых версий сборок:

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

См. также