DrGraph软件升级:编译提速

越来越发现,C++ Builder 2010编译速度太慢了,完全编译一次,要花20分钟的时间。这还是在我把所有的通用头文件包含到一个头文件中,然后用hdrstop进行处理,加上预编译后还是这个样。

在每个CPP的头三行均为:

#include "CbwAllHeader.h"

#pragma hdrstop

#include "CbwExcludeHeader.h"

其中,CbwAllHeader.h为通用常见头文件,CbwExcludeHeader.h为模板或在头文件中有赋值操作等不能置于hdrstop之前进行预编译的头文件集合。

以前在CB6下,用bcc32pch,完全编译一般在1分钟即可完成。这感觉,天上地下。

2010下有没有好的提速办法。首先还是看bcc32pch。结果很是失望。人家提示说:

DrGraph软件升级:编译提速

不支持CB2010。其官网上也说项目暂停。另想它方。

查到一篇有用文章:用RamDisk大幅提高BCB的编译速度

(http://blog.sina.com.cn/s/blog_4ba357b60100a476.html):

 

BCBBorland C++ Builder6.0编译一个三千万行代码级别的项目是什么一种感觉?对,你没看错,八位数,三千万。在我的双核笔记本上一般需要五到十分钟。最痛苦的一次竟然花费了将近半个小时的时间。这点时间足够你悠哉游哉去泡杯茶,静静地喝完,然后再把杯子洗好了。

这里所说的编译时间是指全新编译的时间,不是增量编译的时间。增量编译需要的时间少得多,不过你的运气并不总是那么好的。

网上流传的BCB的优化配置有不少,大多大同小异。如CSDN所载:

 9.1 C++Builder编译问题

【建议9-1-1】设置Project的Option,在Complier属性页,设置Per_complied   handers属性,将其设置为Use   Per_complied   handers,filename定义为自己的文件名,以避免默认文件在编译了多个程序之后的疯狂增大。

【建议9-1-2】设置Enviroment   Option,在Preferences属性页,设置Compling   and   running属性,选择Cache   handers   on   startup,使程序启动的时候就将预编译头文件加载到内存中。

【建议9-1-3】将常用的系统头文件定义到自定义的一个头文件里面,并将其加载到#pragma   hdrstop语句之前,使编译器将其预编译,加快编译速度。在此头文件里,可以加载一些自编写的,不经常变化(或者不变化)的头文件,以加快编译系统的编译速度。


但这只能治标,不能治本。

基于长期与BCB艰苦作战的经验,发现其编译时产生的临时文件对硬盘的读写要求较高。每次编译,硬盘灯就一直亮着。硬盘的读写速度很大程度上决定了编译速度。于是,使用RamDisk的想法自然应运而生。

所谓RamDisk,就是虚拟硬盘。简单讲,就是将内存划出一部分当作硬盘使。以前,内存不够的时候,使用虚拟内存(即划出一部分硬盘当作内存使)来增大系统资源。现在,内存便宜了,好的配置都是几个GB的内存,一般都用不了。于是,RamDisk就能发挥作用了。Ramdisk的速度特别快,大概是现在最快的7200转硬盘速度的30倍,特别适合存放临时文件或需要频繁读写的文件。

微软曾经写过一个RamDisk原型系统,并且开放了源代码。后来的许多产品都是借鉴或直接修改自该原型系统的。目前免费的RamDiskGavotte RamDisk是个不错的选择,它是基于微软原型系统的修改版,加装了GUI(图形界面),可以自定义RamDisk的大小、挂载类型、盘符等,配置起来很方便。Gavotte RamDisk可以支持XPVista,性能也比较稳定,试用了一下感觉不错。

  There are plenty of Ramdisk driver and software available, such as RamDisk9xME, RAMDiskXP, RAMDiskSE and RAMDiskVE from Cenatek, RamDisk and RamDisk Plus from SuperSpeed, RAMDisk Enterprise Lite and Full version plus 64 MB limited free RAMDiskbased on Microsoft Ramdisk below from QSoft, and Ramdisk.sys driver for Windows 2000 from Microsoft published under KB257405. However, most of these Ramdisk drivers either is not free, or limit in its functionality especially on the size on RAM-disk. Some not even support Windows Vista.


由于BTFirefox已经使用了硬盘保护技术,个人认为没有必要对它们再使用RamDisk了。当然,还有其他一些应用,比如IE临时文件,解压缩文件等,这里不一一叙述。

回到本文主题。开辟一个256MBRamDiak(更大也用不完了)。将BCB的临时文件$(BCB)libvcl60.csm和编译临时文件Obj存放到RamDisk上,哇,编译速度显著提高,快了五到十倍。真是枯木又逢春呀!

RamDisk里的文件断电就会消失,所以不宜放重要的文件。简单起见,可以编写两个脚本。关机脚本将RamDisk中的文件复制到物理硬盘。开机脚本将物理硬盘中的文件复制到RamDisk。这样,两者就同步了。

那就下载RamDisk来试试。

参照http://wenku.baidu.com/view/e1f88474f46527d3240ce013.html 进行配置OK

创建R盘及其子目录DrGraph

将工程临时输出文件置于R:DrGraph

开始全编译,结果耗时15分钟。

唉,省了1/4的时间。何时能达到全编译在1分钟左右。做出这个功能的家伙,建议授予他图灵奖。

 

当然,从另一个角度而言,需要确保在C++ Builder中正确使用预编译头。这个简单,查一下#pragma hdrstop前面是否全为#include "CbwAllHeader.h",无需每个源文件打开进行查看,毕竟有近200CPP文件。最方便的方法是在当前工程里查找#pragma hdrstop,看其是否在第2行。

查找倒是容易,但在CB2010中,是按文件进行树形结构保存结果的。

DrGraph软件升级:编译提速

如果要一个个地去点开看是否在第2行,那就太蠢了。最有效的做法是:先全选,再复制,然后在notepad++中粘贴,结果为:

DrGraph软件升级:编译提速

这个看起来还是不是很方便,要跳行,幸亏notepad++中有替换功能,把D:...*.cpp替换为空,那看起来就轻松了。这得用得正则表达式,顺便回顾下。

简单分析下,可列出正则表达式

DrGraph软件升级:编译提速

然后点击全部替换,得到结果:

DrGraph软件升级:编译提速

DrGraph软件升级:编译提速

当然,如果闲得无事,还可以继续替换。不过这已足够醒目的了。还有一个稍微无耻一点的做法,是再把D:...*.cpp替换为空,这样,每行开始就是(2),如果不是,那就好定位了,至少可以检查全对的状态。

DrGraph软件升级:编译提速

结论是:我已全部按期望方式进行预编译头文件,但速度还是这样的慢,目前还没有办法提高。

原文链接: https://www.cnblogs.com/drgraph/archive/2013/04/16/3024468.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    DrGraph软件升级:编译提速

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/84910

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午9:47
下一篇 2023年2月9日 下午9:48

相关推荐