加快构建时间的方法? (C#/非托管 C++)

Posted

技术标签:

【中文标题】加快构建时间的方法? (C#/非托管 C++)【英文标题】:Ways to speed up build time? (C#/Unmanaged C++) 【发布时间】:2009-07-29 19:00:55 【问题描述】:

我正在开发的旧版应用程序需要大约 2 小时来构建。该项目有大约 170 个项目,其中 150 个左右是非托管 C++,另外 30 个是 C#.Net 2.0。

有什么建议可以改善此类项目的构建时间?

【问题讨论】:

之前有人问过类似的问题。搜索“incredibuild”以找到其中的一些。 您是否需要经常从头开始构建它,还是增量构建很慢? 我们经常需要从头开始构建。每当进行更改以进行 QC 处理时,我们都需要完整的构建。 【参考方案1】:

专注于 C++ 项目 - 它们几乎肯定是构建时间消耗最多的项目。

关于缩短 C++ 构建时间的一些技巧:

确保只包含 C++ 项目中需要的标头! 尽可能在标头中使用前向声明,而不是包含其他标头 尽可能使用 /MP 开关并行构建 有效地使用抽象 不要使用内联函数,因为这些函数在编译时成本更高 获取正确的依赖关系,这样您就不会更频繁地构建所需的内容 适当使用预编译的头文件

除此之外,如果您说的是 2 小时的构建时间,通常还有一个简单、便宜(从整体上看)的解决方案:

升级硬件以帮助减少计算时间

【讨论】:

100% 同意。你用什么编译器?查看合适的编译器缓存系统(例如 gcc 的 ccash)SSD 的构建服务器 mith 值得一看 我主要使用MSVC,但上面的大多数参数都是通用的C++编译策略。不过,这个问题可能是特定于 MSVC 的,因为它混合了 C++ 和 C#。【参考方案2】:

如果您在每台需要构建它的机器上安装IncrediBuild,它会将构建过程分配给所有机器。 如果您真的想只用硬件解决问题,您可以设置一些仅用作 IncrediBuild 客户端的专用机器。

在不同的规模上,确保您的每个项目都正确配置了预编译头文件。

【讨论】:

【参考方案3】:

您可以尝试分布式构建系统 Incredibuild:http://www.xoreax.com/visual_studio.htm

【讨论】:

【参考方案4】:

您可以使用lint 之类的工具来查看您的 c++ 项目中是否有多余的包含文件。

Games from Within 也有一篇关于此主题的精彩文章。

【讨论】:

【参考方案5】:

为项目制定多个解决方案,仅包含项目的相关子集,并为发布等留下一个超级解决方案。

【讨论】:

以上是关于加快构建时间的方法? (C#/非托管 C++)的主要内容,如果未能解决你的问题,请参考以下文章

在托管进程中使用 EventWaitHandle 和在非托管进程中使用 WaitForSingleObject 进行跨进程同步

用 C++/CLI 包装非托管 C++ - 一种正确的方法

将非托管 C++ dll 添加到托管 C++ dll

让非托管 c++ 代码调用调用 c# 代码的托管 c++ 代码

PInvokeStackImbalance C# 调用非托管 C++ 函数

如何在非托管 c++ dll 中查找调用方程序集名称