在Visual Studio 2005上的编译时间非常慢

时间:2020-03-05 18:51:09  来源:igfitidea点击:

我们的编译时间非常慢,在双核2GHz,2G Ram机器上可能要花费20多分钟的时间。

这主要归因于我们的解决方案的规模,该解决方案的规模已增长到70多个项目,还有VSS,当我们拥有大量文件时,VSS本身就是瓶颈。 (不幸的是,换掉VSS并不是一个选择,所以我不希望它降级为VSS bash)

我们正在考虑合并项目。我们还在寻找具有多种解决方案的解决方案,以实现关注点的更大分离,并为应用程序的每个元素提供更快的编译时间。当我们尝试保持同步时,我可以看到这将成为DLL的地狱。

我很想知道其他团队是如何处理此扩展问题的,当代码库达到临界值时,我们会怎么做?我们浪费了半天的时间来观看状态栏来传递编译消息。

更新
我忽略了提及这是一个解决方案。感谢所有C ++的建议,但是距离我不得不担心头文件已经过去了几年了。

编辑:

到目前为止已经有用的不错的建议(不是说下面没有其他不错的建议了,只是有什么帮助了)

  • 我们必须小心静态全局变量冲突。
  • 添加新模块时,必须使uber文件保持最新状态

这有点痛苦,但是对于一个在新模块方面基本上是静态的项目,初期的痛苦可能是值得的。我已经看到这种方法在某些情况下胜过IB。

回答

Chromium.org团队列出了一些加快构建的选项(此时大约在页面的一半):

<compilation defaultLanguage="c#" debug="true" batch="true" >

回答

我们可能还需要检查循环项目参考。这对我来说曾经是一个问题。

那是:

项目A参考项目B

项目B引用项目C

项目C参考项目A

回答

到目前为止已经有用的不错的建议(不要说下面没有其他不错的建议,如果我们遇到问题,那么我建议我们先阅读一下,看看对我们有什么帮助)

  • http://weblogs.asp.net/scottgu/archive/2007/11/01/tip-trick-hard-drive-speed-and-visual-studio-performance.aspx
  • http://arnosoftwaredev.blogspot.com/2010/05/how-to-improve-visual-studio-compile.html
  • http://blog.brianhartsock.com/2009/12/22/analyzing-visual-studio-build-performance/

回答

在Visual Studio 2005中有未记录的/ MP开关,请参阅http://lahsiv.net/blog/?p=40,它将启用基于文件而不是基于项目的并行编译。这可以加快最后一个项目的编译速度,或者如果我们编译一个项目,则可以加快编译速度。

回答

一些分析工具:

工具->选项-> VC ++项目设置-> Build Timing =是
会告诉我们每个vcproj的构建时间。

在编译器命令行中添加/ Bt开关,以查看每个CPP文件花费了多少

使用/ showIncludes捕获嵌套的include(包括其他头文件的头文件),并查看哪些文件可以通过使用前向声明节省大量IO。

这将通过消除依赖关系和性能消耗来优化编译器性能。

回答

在花钱购买更快的硬盘驱动器之前,请尝试完全在RAM磁盘上构建项目(假设我们有剩余的RAM)。我们可以在网上找到各种可用的RAM磁盘驱动器。我们找不到比RAM磁盘快的任何物理驱动器,包括SSD。

以我为例,一个使用Incredibuild在7200 RPM SATA驱动器上的6核i7上构建耗时5分钟的项目通过使用RAM磁盘仅减少了约15秒。考虑到需要重新复制到永久存储以及可能丢失工作的可能,因此15秒不足以激励用户使用RAM磁盘,而对花费数百美元购买高RPM或者SSD驱动器可能没有太多动机。

收益不大可能表明该版本受CPU约束或者Windows文件缓存相当有效,但是由于这两个测试都是在未缓存文件的状态下进行的,因此我倾向于使用CPU约束的编译。

根据我们要编写的里程的实际代码,可能会有所不同-因此请不要犹豫进行测试。

回答

选择CPU时:L1高速缓存大小似乎对编译时间有很大影响。另外,通常有2个快速内核比4个慢速内核更好。 Visual Studio不能非常有效地使用额外的内核。 (这是基于我在C ++编译器上的经验,但是对于Cone来说也可能是正确的。)

回答

我现在也确信VS2008存在问题。我正在配备3G Ram的双核Intel笔记本电脑上运行它,并且已关闭了防病毒功能。编译解决方案通常很麻烦,但是如果我一直在调试,那么随后的重新编译通常会慢下来。从持续的主磁盘指示灯可以清楚地看到磁盘I / O瓶颈(我们也可以听到)。如果取消构建和关闭VS,磁盘活动将停止。重新启动VS,重新加载解决方案,然后重新构建,它的速度要快得多。下次统一

我的想法是,这是一个内存分页问题,​​VS刚用完内存,O / S开始页面交换以尝试腾出空间,但是VS要求的内容超出页面交换可以提供的范围,因此它减慢了爬网速度。我想不出任何其他解释。

VS绝对不是RAD工具,对吗?

代码数量不匹配

代码数量不匹配