为什么MSBuild只使用一个核心而VS.NET耗尽了同一个.sln上可用的所有核心?

时间:2011-05-06 09:31:40

标签: visual-studio-2008 msbuild build

我们的解决方案包含大约20个.vcproj文件。除了主程序之外,大多数都是独立的库,它们只依赖于自己的单元测试。

当我们在VS.NET中构建此解决方案时,我们注意到VS启动了多个VCBuildHelper进程并有效地耗尽了所有可用的核心。但是,当我们运行使用MSBuild实现的每日构建脚本时,我们注意到只使用了一个核心。

我们添加了/ maxcpucount和/ p:BuildInParallel = true,但它仍然无效。

感谢任何帮助。

提前致谢!

2 个答案:

答案 0 :(得分:3)

并行构建非常重要,因为MSVS做了一个有趣的“项目顺序”决定并行运行某些东西,而其他的并不是。但是,根据你的描述,你似乎应该看到更多的并行性。

以下是MSBuild团队关于调整并行性的帖子:

http://blogs.msdn.com/b/msbuild/archive/2010/03/08/tuning-c-build-parallelism-in-vs2010.aspx

这是一个YieldDuringToolExecution工具,可以获得更好的并行性(MSBuild 4):

http://blogs.msdn.com/b/msbuild/archive/2010/06/03/better-parallelism-in-msbuild-4-with-yieldduringtoolexecution.aspx

稍微过时一点,这是一个关于在IDE中获得更好的并行性的博客黑客:

http://www.hanselman.com/blog/HackParallelMSBuildsFromWithinTheVisualStudioIDE.aspx

您使用的是哪个MSVS版本?

希望这会有所帮助......

答案 1 :(得分:0)

我们尝试了各种各样的方法,没有运气。现在我们回到了我们的老朋友: devenv xxx.sln / build configuration ,它给了我们与IDE中相同的并行性。

我相信某处隐藏的部分肯定会丢失。我没时间搞清楚:(