3

我有一个使用 Visual Studios 2008 配置的项目。当我打开 IDE 并点击构建时,我系统上的所有内核都用于构建项目。但是,当我尝试从命令行构建时,只使用了 1 个核心。这是我正在运行的命令:

C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild VTK.sln /m /fl /tv:3.5 /p:Configuration=RelWithDebInfo

通过阅读文档,/m 开关似乎应该告诉 MSBuild 使用所有内核,但事实并非如此。任何想法如何使它使用所有核心?

谢谢

4

1 回答 1

2

好吧,实际上该/m选项指定了“要构建的最大并发进程数”。也就是说,msbuild.exe并行启动以并行构建项目的最大进程数(每个进程最多将构建一个项目)。与“使用所有内核”完全不同的东西。虽然,不可否认,/m选项的长形式名称/maxcpucount可能暗示其他情况,但它的描述应该更好地说明正在发生的事情:

  /maxcpucount[:n]   Specifies the maximum number of concurrent processes to
                     build with. If the switch is not used, the default
                     value used is 1. If the switch is used without a value
                     MSBuild will use up to the number of processors on the
                     computer. (Short form: /m[:n])

现在,如果您的解决方案不允许项目并行构建,例如因为您的每个项目都是另一个项目的依赖项(例如构建 P2 需要 P1,项目 P3 需要 P2 等),那么您赢了'没有看到任何并行构建发生。根据构建完成的速度,您也不会在所有内核上看到任何相关活动(例如,使用任务管理器),因为 CPU 图表的“闪烁”可能并不准确地反映实际发生的情况(请注意构建是也相当 I/O 密集型,这并没有显示查看 CPU 负载)。

但是,您应该查看(例如使用进程资源管理器或任务管理器)msbuild.exe与您拥有的内核/CPU 数量相匹配的进程数量(或作为可选数字传递给/m选项的等效数量。

您可能还想参考这个 SO question。还搜索“parallel msbuild”会产生一些带有更多信息的好结果。

于 2012-05-03T04:38:40.010 回答