首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在visual studio非托管代码中减少发布构建时间?

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

Stack Overflow用户
提问于 2015-03-10 12:24:39
回答 2查看 1.1K关注 0票数 1

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

我知道编译器正在试图优化代码,因此它必然要花费更多的时间,但与其他编译器(主要是g++)在非windows平台上所花费的时间相比,这不是太长了吗?

到目前为止我试过.

从源文件和头文件中删除不必要的头文件,在可能的情况下引入前向声明,但不要暂停。

我分析了所有的头文件。在项目中的大约50个头文件中,模板很少用于2-3个头文件中.这些标头也没有广泛地包含在源文件中。

我对这种行为有两种观察-

  1. 在源代码中没有什么可怕的错误,否则非windows平台上的编译器就不能这么快地完成。
  2. 似乎VS编译器确实需要更多的时间(1-2小时),其他编译器可以在10分钟内完成,但是VS编译器不会那么糟糕。因此,我必须丢失一些配置(除了优化之外)。

有没有人知道怎么找出这里出了什么问题?可能的起点将是确定每个文件所占用的编译时间。如何找到每个文件的编译时间?

如果我还能改进/尝试一些东西,会有可能吗?

这里是关于硬件、源代码等的更多详细信息,如注释中所要求的

RAM - 8.0 GB内存

操作系统- Windows 7 64位

处理器- Intel Core i5 2.6 GHz

Visual 2013终极版

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

源文件-大约55,头和源文件各和80KLOC代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-10 17:12:59

根据在评论中收到的建议,我首先找出了每个文件所占用的编译时间:

  1. 清理项目,以确保删除所有*.obj文件
  2. 重新构建项目
  3. 注意到每个文件的时间戳,我发现一个文件需要两个小时才能编译。

当我打开源文件时,我在代码中看到了一些可怕的错误,这与我的观察结果形成鲜明对比。这是一个巨大的27 27KLOC的怪物文件(Opps!,当然我没有写这个文件)。动态创建并分配给数组的类有739个实例。每个实例也会动态地创建它的一些成员。在此文件中正在创建数千个对象。

为了确保这个文件是罪魁祸首,VS工作室对这个文件进行了太多的优化。按照@Predelnik在注释中的建议,我禁用了该文件中的优化。哇哦!程序在几分钟内编译。这个源代码需要一个严肃的重新分解。

如果有人面临这样的问题,我会这样做-

  1. 启用构建和运行选项和/MP标志.正如讨论过的Here。如果代码有问题,那么并行项目和文件编译就不会有帮助了。
  2. 找出是否有任何源文件是上述的罪魁祸首。我相信我找到的链接Here是计算每个文件的构建时间而不是编译时间的一种方法。
票数 0
EN

Stack Overflow用户

发布于 2015-03-10 12:34:32

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

没有更多的细节。

如果我还能改进/尝试一些东西,会有可能吗?

是。特别是,考虑:

  • 从头文件(包括和定义在.h文件中)中删除任何模板化的代码,并通过pimpl访问该代码(因为模板在每次传递时都会被重新评估)。
  • 优化预编译头的使用
  • 将控制台应用程序拆分为单独的模块(这样,构建系统将只更新构建上的脏二进制文件)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28963669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档