我有一个使用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使用所有内核,但事实并非如此。任何想法如何使它使用所有核心?
由于
答案 0 :(得分: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])
现在,如果您的解决方案不允许项目并行构建,例如因为您的每个项目都是另一个项目的依赖项(如需要P1来构建P2,则需要P2来投影P3等。 )你不会看到任何并行构建发生。根据构建完成的速度,您也不会在所有核心上看到任何相关活动(例如,使用任务管理器),因为CPU图形的“闪烁”可能无法准确确定实际情况(构建是也非常I / O密集型,它没有显示CPU负载)。
但是,您应该看到(例如使用Process Explorer或任务管理器)许多msbuild.exe
进程,这些进程与您拥有的核心/ CPU数量相匹配(或者作为可选数字传递的等效数字)到/m
选项。
您可能还想参考this SO question。另外,搜索“parallel msbuild”会产生一些更好的点击信息。