问题 更多的CPU /核心是否有助于VS.NET构建时间?


我想知道是否有人知道Visual Studio .NET是否有并行构建过程?我有一个包含大量项目的解决方案,每个项目都有很多标记/代码,很多类型等等。只要坐在那里使用intellisense运行它就可以达到大约700MB。但是构建时间非常慢,而且似乎只有我的两个cpu内核中的一个。

这是否意味着构建过程是单线程的?我的解决方案的构建依赖链不是线性的,所以我不明白为什么它不能并行构建一些项目。我记得Joel Spolsky在他的新SSD上写博客,以及它对编译时间没有帮助,但他没有提到他正在使用哪种编译器。我们正在使用VS 2005.任何人都知道它的编译是如何工作的?在2008/2010,它有什么不同/更好的?

编辑:这里有很多好的回复,但我对C#和ASP.NET特别感兴趣。不爱我们的网民?


9427
2018-04-05 14:13


起源

您是否使用可能消耗太多资源的任何VS插件?您的计算机是否有足够的RAM,尽可能在没有交换的情况下缓存在RAM中? - Mark Byers
也可以看看 stackoverflow.com/questions/1814015/... - Brian
我想知道公羊。这是一款2核3GB的笔记本电脑。看起来不是很多,但如果devenv.exe进程仅使用700-900MB,我还需要更多吗? - LoveMeSomeCode


答案:


MSBuild(VS用于执行构建,从2005 / .NET2开始)支持并行构建。默认情况下,VS会将最大并行度设置为您的处理器数。使用工具|选项|项目和解决方案|构建并运行以覆盖此默认值。

当然,任何一个构建都可能具有更多限制(或没有)容量来允许并行构建。例如。解决方案中只有一个程序集不提供并行构建的范围。同样,大量具有大量依赖关系的程序集可能会阻止并行性(A依赖于B,C依赖于A和B,D依赖于C没有并行构建的范围)。

(对于C ++,在VS 2005和2008中使用自己的构建系统,在2010年,C ++也将使用MSBuild构建。)


9
2018-04-05 14:19



当我以较低的时钟速度从P4 HT变为新的Core i7 Q时(即使使用turbo boost),我的VC ++ 2008构建时间从50分钟下降到5(带/ MT)。我知道处理器并不是唯一可以改进的部分,但我仍然印象深刻。 - Michael Myers♦
@mmyers:构建可以受到磁盘IO,内存空间,内存带宽或CPU的限制 - 以及构建中不同时间的不同构建。一般而言,你可以尽可能多地想要所有这些(即预算:-(应用)。特定的构建可能会有一个比另一个更有帮助,但下一个项目可能在其他地方受到限制。 - Richard
是的我同意。从CPU图表来看,我认为我的瓶颈现在是硬盘速度(两个系统都有7200转驱动器)。所以,只要好的产品价格实惠,我的下一次升级就是SSD。 - Michael Myers♦
是的,我现在正在寻找我家用机器的固态硬盘,我一直听到很棒的东西。 - LoveMeSomeCode


斯科特·汉塞尔曼(Scott Hanselman)在几年前的博客文章中提到了细节 使用并行构建和多核CPU,使用MSBuild进行更快的构建 这应该是有意义的。他还有一个后续职位 Hack:Visual Studio IDE中的并行MSBuild


4
2018-04-05 14:23





我建议SSD驱动器将提供最大的好处 显式构建

超级用户 这也驳斥了乔尔的文章

所以要求最好的笔记本电脑等:讨论SSD,核心,VS如何工作等

资格赛:我在一个月或三个月前买了一台英特尔固态硬盘供家庭使用。 Lordy它是快速的,可以说是我买过的最好的套件,除了我的Voodoo 2 ......


2
2018-04-05 14:34



我知道我问过这个问题就像2年前一样,但我已经购买了3个固态硬盘,而且我的构建时间非常快。 - LoveMeSomeCode


使用VS2k5取决于您尝试使用的语言。 C / C ++对多线程构建有“实验性”支持,但直到2k8使用/ m:switch才正式支持此功能


1
2018-04-05 14:21





我在Visual Studio 2008中使用了并行构建。它确实加快了速度,但有许多烦人的副作用。

我经常得到失败的构建不是因为某些编译失败,而是因为VS无法写入锁定的符号数据库。我也搞砸了Intellisense的结果。有时我必须重复两次或三次构建才能获得最终成功。


0
2018-04-05 17:17