Mpgo.exe (托管配置文件引导式优化工具)

托管配置文件引导式优化工具(Mpgo.exe)是一种命令行工具,它使用常见的最终用户方案来优化 本机映像生成器(Ngen.exe)创建的本机映像程序集。 使用此工具可以运行生成配置文件数据的训练方案。 本机映像生成器(Ngen.exe)使用此数据来优化其生成的本机映像应用程序程序集。 训练方案是应用程序的预期用途的试用运行。 Visual Studio Ultimate 2012 及更高版本中提供了 Mpgo.exe。 从 Visual Studio 2013 开始,还可以使用 Mpgo.exe 来优化 Windows 8.x 应用商店应用。

分析引导式优化通过从训练方案收集数据并使用它来优化本机映像的布局,从而提高应用程序启动时间、内存利用率(工作集大小)和吞吐量。

在遇到中间语言(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 选项,则不使用任何必需参数。

必需参数 Description
-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必须存在于目录-Import指定的目录中的程序集名称。 如果 目录 指定包含空格的路径,请使用三组双引号。

必须指定或-Scenario-Import指定两个参数,但不能同时指定这两个参数。
-OutDir < 目录> 放置优化程序集的目录。 如果输出目录文件夹中已存在程序集,则会创建一个新副本,并将索引号追加到其名称中;例如: assemblyname-1.exe。 如果 目录 指定包含空格的路径,请使用双引号。
-AssemblyList < assembly1 assembly2 ...>

—或—

-AssemblyListFile < 文件>
要收集配置文件信息的程序集列表(包括 .exe 和 .dll 文件),用空格分隔。 可以指定 C:\Dir\*.dll*.dll 选择指定或当前工作目录中的所有程序集。 有关详细信息,请参阅“备注”部分。

—或—

包含要收集配置文件信息的程序集列表的文本文件,每行列出一个程序集。 如果程序集名称以连字符开头(-),请使用程序集文件列表或重命名程序集。
-AppID < appId> 指定包中应用程序的 ID。 如果使用通配符 \,Mpgo.exe 将尝试枚举包中的 AppID,并回退到 <package_family_name>!如果应用失败,则应用。 如果指定以感叹号(!)为前缀的字符串,Mpgo.exe 将包系列名称与提供的参数连接起来。
-Timeout < > 允许 Windows 8.x 应用商店应用在应用退出之前运行的时间量。
可选参数 Description
-64bit 为 64 位系统检测程序集。 必须为 64 位程序集指定此参数,即使程序集将自身声明为 64 位也是如此。
-ExeConfig < 文件名> 指定方案用于提供版本和加载程序信息的配置文件。
-f 强制在二进制程序集中包含配置文件数据,即使已签名也是如此。 如果程序集已签名,则必须重新签名;否则,程序集将无法加载和运行。
-Reset 重置环境以确保中止的分析会话不会影响程序集,然后退出。 默认情况下,环境在分析会话之前和之后重置。
-Timeout < 时间(以秒为单位)> 指定分析持续时间(以秒为单位)。 对于 GUI 应用程序,请使用略高于观察到的启动时间的值。 在超时期限结束时,尽管应用程序继续运行,但会记录配置文件数据。 如果未设置此选项,分析将继续,直到应用程序关闭,此时将记录数据。
-LeaveNativeImages 指定运行方案后,不应删除已检测的本机映像。 获取为正在运行的方案指定的应用程序时,主要使用此选项。 它将防止对本机映像进行重新生成,以便后续运行 Mpgo.exe。 运行完应用程序后,如果指定此选项,缓存中可能存在孤立的本机映像。 在这种情况下,请使用相同的方案和程序集列表运行 Mpgo.exe,并使用 -RemoveNativeImages 参数删除这些本机映像。
-RemoveNativeImages 从指定位置 -LeaveNativeImages 的运行中清理。 如果指定-RemoveNativeImages,Mpgo.exe 将忽略除任何参数之外-64bit-AssemblyList的任何参数,并在删除所有已检测的本机映像后退出。

注解

可以在命令行上使用和-AssemblyList-AssemblyListFile多次。

如果在指定程序集时未指定完整路径名称,Mpgo.exe 在当前目录中查找。 如果指定了不正确的路径,Mpgo.exe 会显示错误消息,但仍会继续为其他程序集生成数据。 如果在训练方案中指定未加载的程序集,则不会为该程序集生成训练数据。

如果列表中的程序集位于全局程序集缓存中,则不会更新它以包含配置文件信息。 从全局程序集缓存中删除它以收集配置文件信息。

建议仅对大型托管应用程序使用 Ngen.exe 和 Mpgo.exe,因为预编译本机映像的好处通常仅在运行时消除大量 JIT 编译时才可见。 在非工作集密集型的“Hello World”样式应用程序上运行 Mpgo.exe 不会带来任何好处,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. 将用于 Ngen.exe 的 IL 程序集替换为包含指定目录中 -OutDir的配置文件信息的新的 IL 程序集。

  4. 应用程序设置(使用 Mpgo.exe提供的映像)将安装优化的本机映像。

建议的工作流

  1. 使用参数 Mpgo.exe -Scenario 创建一组优化的 IL 程序集。

  2. 将优化的 IL 程序集检查到源代码管理中。

  3. 在生成过程中,使用 -Import 参数调用 Mpgo.exe 作为生成后步骤,以生成要传递给 Ngen.exe的优化 IL 映像。

此过程可确保所有程序集都具有优化数据。 如果更频繁地签入更新的优化程序集(步骤 1 和步骤 2),则整个产品开发中的性能数字将更加一致。

使用 Visual Studio 中的 Mpgo.exe

可以从 Visual Studio 运行 Mpgo.exe(请参阅 文章 How to: Specify Build Events (C#),但具有以下限制:

  • 不能将带引号的路径与尾部斜杠一起使用,因为 Visual Studio 宏默认也使用尾部斜杠标记。 (例如, -OutDir "C:\Output Folder\" 无效。若要解决此限制,可以转义尾部斜杠。 (例如,请改用 -OutDir "$(OutDir)\"

  • 默认情况下,Mpgo.exe 不在 Visual Studio 生成路径上。 必须将路径添加到 Visual Studio,或在 Mpgo 命令行上指定完整路径。 可以在 Visual Studio 的生成后事件中使用 -Scenario-Import 参数。 但是,典型的过程是从 Visual Studio 的开发人员命令提示符处使用-Scenario一次,然后用于-Import在每次生成后更新优化程序集;例如: "C:\Program Files\Microsoft Visual Studio 11.0\Team Tools\Performance Tools\mpgo.exe" -import "$(OutDir)tmp" -assemblylist "$(TargetPath)" -outdir "$(OutDir)\"

例子

Visual Studio 开发人员命令提示符中的以下 Mpgo.exe 命令优化了税务应用程序:

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

另请参阅