【问题标题】:Why MSBuild only uses one core while VS.NET uses up all the cores available on the same .sln?为什么 MSBuild 只使用一个内核,而 VS.NET 用完同一个 .sln 上的所有可用内核?
【发布时间】:2011-08-20 01:09:12
【问题描述】:

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

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

我们添加了 /maxcpucount 和 /p:BuildInParallel=true,但它仍然不起作用。

感谢任何帮助。

提前致谢!

【问题讨论】:

    标签: visual-studio-2008 msbuild build


    【解决方案1】:

    并行构建令人惊讶地不平凡,因为 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 版本?

    希望这会有所帮助...

    【讨论】:

    • 感谢您的回复!我们在这里使用 MSVS 2008。我现在正在试验你的参考文章。如果他们中的任何一个成功了,我会发布针对我的情况的最终解决方案。
    • 我们还是 MSVS 2008。我们已经安装了 MSVS2010,但是它有性能和其他问题,我们还不能切入它。 (我猜你可以在 MSVS2008 中获得与 MSVS2010 一样好的或更好的并行性。)- 谢谢,如果你找到它,我会对你的“最终”解决方案感兴趣。
    【解决方案2】:

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

    我相信一定有遗漏的部分隐藏在某个地方。我只是没有时间弄清楚:(

    【讨论】:

      猜你喜欢
      • 2022-11-02
      • 2023-03-28
      • 2014-07-01
      • 1970-01-01
      • 2014-03-12
      • 2019-08-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多