构建性能的优化

在某些情况下,您可以进一步优化 Visual Studio 项目的构建速度,方法是对 Incredibuild 配置或项目设置的某些方面进行微调。

优化项目设置

以下对项目设置的更改有助于缩短构建时间,特别适用于使用 Incredibuild 时:

  • Disabling Browse Information – 浏览信息的创建延长了每个文件的编译时间,增加了额外的网络压力,还会在每次构建结束时添加一个额外步骤,用于创建 .BSC 文件。如果您通常不使用此 Visual Studio 功能,您可以选择禁用浏览信息创建,或直接将 Incredibuild 的 Browse Information Creation 选项 (Generate .BSC (Source Browser database) file) 设置为 Never,操作路径为 Agent Settings > Visual Studio Builds > Browse Information

  • Disabling incremental compilation and minimal rebuild/Gi /Gm 编译器标志)– 禁用这两个选项,可获得有略微改进的 Incredibuild 性能。

限制 PDB 文件的数量

此功能适用于 Visual Studio 2012 及更高版本,如需将其作为用户问题的解决方案用于 Visual Studio 2011 版本,我们的支持团队建议您将注册表中的 PdbForwardingMode 标志设置为 0

要实现此功能的分发,Incredibuild 会为每个在给定时间运行的 Agent 创建单独 PDB 文件。也就是说,与标准 MSVC 构建不同,在此情况下,多个 PDB 文件将创建于中间文件夹,这可能会减慢链接阶段的速度。您可以选择限制 PDB 文件的数量。

限制后链接速度可能会加快,此外,进行该操作时,您也相应限制了允许同时编译来自同一项目文件的 Agent 数量。因此,通常仅在您的构建包含相对大量项目的文件时,建议使用此选项。

如需限制 PD 文件数量,前往 Agent Settings > Visual Studio Builds > Advanced,设置一个限制。

防止链接步骤在本地机器上并行运行

允许链接步骤在发起机器上并行运行(假设机器上具有多个核心/CPU 以及分配的 Multiple CPUs/Cores 扩展包)有时可以改进构建性能。然而,如果您的链接步骤通常会消耗大量内存,而您的机器并没有足够的物理内存来支持多链接步骤,那么该操作可能会因过量的页面文件交换而减慢构建速度。

如需对链接步骤进行并行化配置,前往 Agent Settings > Visual Studio Builds > General,然后指定 CPU/核心利用率。

将特定项目设置为本地运行

将繁重任务分发至远端 Agent 可能会导致 Initiator 机器产生高 I/O 比率,进而导致构建时间增加。可以将包含这些繁重任务的项目定义为仅在本地机器上运行。

>要将某项目标记为仅在本地运行:

  1. 在 Visual Studio 中右键点击该项目,并选择 Properties > Configuration Properties > C/C++ >Preprocessor Definitions

  2. 将以下字符串添加至 Preprocessor Definitions 部分:IB_RunLocal

将特定文件同步回 Initiator 机器

此流程适用于已定义为 VC compiler = true 的进程。例如 Microsoft 编译器和 Intel 编译器,两者已在 Incredibuild 中定义为“将 OBJ 文件返回”。如果想要让这两种编译器返回其他文件,您可以将文件明确定义为“需要同步回 Initiator 机器”。

>要将文件明确定义为“需要同步返回 Initiator 机器”:

  1. 在 Coordinator 机器中, 右键点击 Incredibuild 任务栏图标,并选择 Coordinator Monitor

  2. 右键点击 Agent 列表中的 Initiator Agent 并选择 Set Registry Value...

  3. 确保将 Value Category 设置为 Builder

  4. Name 之下,输入 AdditionalOutputMasks

  5. Data 之下,输入以下字符串之一:*.txt 用于返回所有 *.txt 文件。*.txt;*.xml 用于返回所有 *.txt files 和所有 *.xml files。

  6. 点击 Ok。注册表值成功添加至 Initiator 机器。