减小Delphi2010程序的尺寸(关闭RTTI反射机制)


======================================================
注:本文源代码点此下载
======================================================

减小delphi2010程序的尺寸(关闭rtti反射机制)

自从delphi2010增强了rtti反射机制后,编译出来的程序变得更大了,这是因为默认情况下 delphi2010 给所有类都加上了rtti信息(呵呵,不管你用不用它,好像实用价值确实不高,至少目前我不会去用的)。虽说对程序的运行速度影响不大,但会增加安装程序的大小,这也是我们不愿看到的。有没有办法禁用rtti信息,从而减小编译后程序的大小呢?,从文档中我们找到了方法。

一、在工程中用编译指令禁用rtti

禁用的方法很简单,就是要在工程(dpr文件中。delphi2010下项目文件是dproj文件,但dpr文件仍然是默认的编写代码的项目文件)的uses语句前添加下面的定义就可以了:

{ reduce exe size by disabling as much of rtti as possible (delphi 2009/2010) }

{$if compilerversion >= 21.0}

{$weaklinkrtti on}

{$rtti explicit methods([]) properties([]) fields([])}

{$ifend}

ok,这样重新编译后你会发现,确实把exe文件大小减小了,但这还不够,请继续往下看。

二、重建无rtti信息的vcl/rtl

下面我们进行关键的操作,因为vcl和rtl单元还是带rtti信息的,我们要把它们的rtti信息去掉。打开delphi2010新建一个工程,并保存,这里我们为方便讨论,把它保存到c:\nortti目录,在它下面建一子目录delphi2010,完成后目录如下:c:\nortti\delphi2010。

在dpr的uses段中添加所有使用到的vcl/rtl单元,呵呵,这样可能会很乱,所以我把所有单元名放到一个包含文件中去了(.inc文件),引用一下就可以了(注意,这里是所有单元名,真正使用时你只需保留用到的单元名),然后单击project菜单中的options项,编辑unit output directory项的值为 c:\nortti\delphi2010。编译该项目,如果有错误提示,就删除那些单元引用。(注:当jpeg单元重建时你需要拷贝source\win32\vcl\imaging\jpgimage\obj目录下的文件到你项目的目录),编译完成后关闭项目。

提示:可以用下面这个批处理文件产生上面说的单元列表

@echo off

del unitlist.inc

dir /b "c:\program files\embarcadero\rad studio\7.0\source\win32\vcl\*.pas" >> unitlist.inc

dir /b "c:\program files\embarcadero\rad studio\7.0\source\win32\rtl\win\*.pas" >> unitlist.inc

dir /b "c:\program files\embarcadero\rad studio\7.0\source\win32\rtl\common\*.pas" >> unitlist.inc

rem manually add some system units (we cannot add the entire dir or problems crop up)

echo sysutils.pas >> unitlist.inc

echo types.pas >> unitlist.inc

echo variants.pas >> unitlist.inc

echo varutils.pas >> unitlist.inc

然后打开生成的unitlist.in文件,查找并替换所有的‘.pas’为‘,’。

呵呵,说了这么多,大家有点晕吧,还好,作者提供了一个项目,http://www.zipplet.co.uk/getfile.php/rttidisable.zip,大家下载下来后,修改一下就可以直接用,记得要修改输出目录哟!

三、在工程中使用新生成的单元

打开delphi2010,修改全局单元查找路径,因为编译器总是按顺序查找单元,我们修改后让它去使用我们重建的单元。

tool菜单 -> options 菜单, 浏览 environment options -> delphi options -> library - win32。在library path最前面添加我们重建单元的完整路径。

这样做后,新建工程就会自动使用我们重建的无rtti的单元了。最后别忘了在dpr工程中使用编译指令禁用rtti哟!

各位可以自己比较一下编译后的文件大小,还是很明显的,另外大家还可以用upx、aspack压缩一下,那样exe就会更小了。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值