如何减小DELPHI可执行文件的大小(100分)

  • 主题发起人 主题发起人 flycat
  • 开始时间 开始时间
F

flycat

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在做的一个DELPHI应用程序有4兆多,怎样才能把它编译的小一些,如编译成带DLL文件,(就象PB编译的应用程序一样,EXE文件比较小,编成带PBD或DLL)。请各位大虾指点,请尽量详细。
 
用ASPACK吧,它可以把EXE减少为原来的1/3
 
build with runtime package
另外压缩
 
没错,aspack
 
upx可能更好。我从ASPACK转向UPX的。
我下载这些工具喜欢到www.softseek.com 找。
有分类,有搜索。。。。
 
UPX压缩的体积小一些,但作出的产品没ASPACK作出的快。产品体积越大越明显。
我嘛-----
小东东UPX
几百KB以上的都用ASPACK
但现在用ASPACK可被UNASPACK反压缩,不知有否UPX的反压缩工具?
 
Exe只留主程序,其它的各模块编译成DLL,我原来的程序有近7M,现在不到1M了。
 
delphi 变得 dll 不也得几百 k 马?看不出小在哪儿
 
为什么要减小Exe的大小,你的程序越大用户就认为你的程序的功能越多,但你也不能放一些
垃圾进去充大。

如果你想让Exe小的话那你直接调用API不是很小吗,Delphi编译出来的程序可能小锝让
你大吃一惊在加上Upx一压更小了。(废话)

 
使用RUNTIME PACKAGE
 
对于4M的文件来说,用RUNTIME PACKAGE往往不合算(你可以用RUNTIME PACKAGE选项用Build编译后,
再在Project->Information for XXXX 查看一下需要哪些包(包在WINDOWS/SYSTEM目录下),
如果这些包加上你的EXE总和大于或差不多比没有这个选项时大,那还是别用,因为用包相对较慢。)
ASPACK的确很不错,至少我这么认为,用它压的DELPHI程序运行速度没有什么变化,而且由于程序变小,
加载速度更快了。
至于用DLL,绝对没有必要,那样只会让你的程序更大,更慢,除非你的程序非常大,
且许多模块并非经常用,那样可以不调入内存,这才有意义。
我还要提一点,就现在来说,4M的程序不算大,除非你在网上发布。
 
你可以试试以下的方法:

1。 看看有没有类似的或相同的代码,把他们编成过程或函数,要注意将底这些
模块与主程序间的耦合度(便于调试和升级);如果这些模块较多可以编到dll中(不
多最好不要这样,因为一个dll文件的框架不小----好象有110多KB)。

2。 优化一下算法 ---- 可以考虑换个控件,看看具体算法有无冗余,必要时可以
考虑用牺牲运行所需内存以减小EXE文件的磁盘空间(比如用变量代替某些代码 ----
例如: xxx1.loadfromfile(opendialog1.filename);
xxx2.loadfromfile(opendialog1.filename);
xxx3.loadfromfile(opendialog1.filename);
不如这样:
var aa:string;
...
aa := opendialog1.filename;
xxx1.loadfromfile(aa);
xxx2.loadfromfile(aa);
xxx3.loadfromfile(aa);
系统减少了代码“opendialog1.filename”
只是加了一些找地址的代码 ---- 代码少啊)。

3。 用动态加载<b>包</b>的办法 把那些“写”着控件代码的*.pas放到<b>包</b>里,
运行时加载他们吧。

4。 如果你的程序界面贴了图 ---- 尽可能用小尺寸的,尽可能用JPG格式的;
如果你使用了自编的*.res(它会在编译时连入EXE的)把那些图片取一些出来吧。

5。 提醒一句:千万不能为节省代码把一些出错处理程序kill了 ---- 程序会不稳
定的。

***
以上是经验之谈,提供于此,仅供参考,如有误谬,敬请指正。
 
aspack 有2.0但是怎么注册,如何注册?
 
把下面这几句写入到.reg文件中,运行注册:

REGEDIT4

[HKEY_CURRENT_USER/Software/ASPack]
"Key"="FPDsi9BISOCHYNf0q+CU5Ea5A9wf9AFoCG4tHMf7FP1AIM+GzQOKFf3X3TT8BkegTiyrd36lTLVdbMRg69019e/G933gpK3kLl7iVL3YoXHOMk3+3IWxNaWOFu5XMx4WRoaRrz7XhxKG7fIkEcU8YPnQoPBSkX2eoBwOrDML3Ac="

 
使用aspack又负面影响没有?比如程序变得不稳定?
 
我推荐用 UPX
 
动态的调用API函数。最好做到窗体以及其它控件的重用!
对于经常用的模块可以编写DDL。
再一个就是:尽量避免冗于代码。做到算法优化。如果你要用图片最好是动态的创建和释放!
 
后退
顶部