如何减少visual studio非托管代码中的发布构建时间?

时间:2015-03-10 12:24:40

标签: c++ c windows visual-studio optimization

我有一个用C / C ++编写的控制台应用程序。即使优化标志设置为-o3,通常在非Windows平台上编译需要5-10分钟。但是,当在Visual Studio中将优化标志设置为Full Optimization (/Ox)并将内联函数扩展设置为Any Suitable (/Ob2) 时,在Windows平台上编译大约需要1-2小时。这在发布/调试模式下都会发生。

我理解编译器正在尝试优化代码,因此它需要花费更多时间,但与非Windows平台上其他编译器(主要是g ++)所花费的时间相比,它不会太多时间。

到目前为止,我试过了..

从源文件和头文件中删除不必要的标头,尽可能引入前向声明,但没有喘息的机会。

我分析了所有头文件。项目中~50个头文件中的2-3个头文件几乎不使用模板。这些标头也未广泛包含在源文件中。

我从这种行为中得出两个观察结果 -

  1. 源代码中没有任何可怕的错误,否则非Windows平台上的编译器将无法如此快速地完成。

  2. 似乎VS编译器真正需要花费更多时间(1-2小时),其他编译器可以在(10分钟)内完成,但VS编译器可能不那么糟糕。因此,我必须缺少改变一些配置(除了优化)。

  3. 有谁知道如何找出这里出了什么问题?可能是起点将确定每个文件所采用的编译时间。如何查找每个文件的编译时间?

    如果我还能改进/尝试某些东西,是否有可能?

    以下是部分评论中所要求的有关硬件,源代码等的其他详细信息

    RAM - 8.0 GB RAM

    操作系统 - Windows 7 64位

    处理器 - 英特尔酷睿i5 2.6 GHz

    Visual Studio - 2013 Ultimate

    注意 - 如果我禁用优化(set /Od and /Ob0 flags in VS),则程序在同一台计算机上的编译时间不到5分钟。

    源文件 - 大约55个,每个头文件和源文件以及80KLOC代码。

2 个答案:

答案 0 :(得分:0)

  

有没有人知道从哪里开始找出这里出了什么问题?

不是没有更多细节。

  

如果我还能改进/尝试某些东西,是否有可能?

是。特别要考虑:

  • 从头文件中删除任何模板化代码(包含在.h文件中并在其中定义),并通过pimpl访问该代码(因为模板会在每次传递时重新评估)。

  • 优化预编译标头的使用

  • 将控制台应用程序拆分为单独的模块(因此构建系统只会在构建时更新脏二进制文件)

答案 1 :(得分:0)

根据评论中收到的建议,我首先找出每个文件的编制时间:

  1. 清除项目以确保删除所有* .obj文件
  2. 再次构建项目
  3. 注意到每个文件的时间戳,我找到了一个文件 花了将近两个小时来编译。
  4. 当我打开源文件时,我发现代码中的某些错误与我的观察相反。它是27KLOC的巨大怪物文件(Opps!,当然我没有写这个文件)。 动态创建并分配给数组的类有739个实例。每个实例依次动态创建一些成员。简而言之,在这个文件中创建了数千个对象。

    确保此文件是罪魁祸首,VS工作室正在采取过多优化此文件的方式。我禁用了优化 在这个文件中由@Predelnik在评论中提出。瞧!程序现在在几分钟内编译。此源代码需要严格的重新分解。

    如果有人遇到这样的问题,我会按照以下方式进行 -

    1. 启用构建并运行选项和/ MP标志。正如所讨论的那样Here。如果代码存在问题,并行项目和文件编译将无济于事。

    2. 找出是否有任何源文件是如上所述的罪魁祸首。我相信我找到的链接Here是一种计算构建时间而不是每个文件的编译时间的方法。