减小Delphi可执行文件的大小,非高手莫入(200分)

  • 主题发起人 主题发起人 yayongm
  • 开始时间 开始时间
如果你的窗体很多的话
不防将“选项”里的
Packages -> Build With runtime packages 选上
那程序就会很小,不过发布时要将所用的包一起发布
 
谁知道,ASPARK在那里下栽[:D]
 
呵呵,有意思。‘gs’
to zhukairu:
http://delphi.mychangshu.com/
 
程序的大小与开发的方便简单没有可比性
 
各位用用KOL先...
我只是想提供一种思路...
哎,我本来就不是高手...
向 com 大虾学习...
 
呵呵。。。。有意思。想法还是很好的。
 
天,难道我要重学汇编语言?
 
现在的编程工具都这样啊,经过优化的代码你还嫌大?那就没有办法啊,用VC?只不过它
的支持文件Windows里面有,如果没有还不是一样啊!要好的界面总的有点牺牲,不然你用
汇编语言得了
 
1、能用API的,不用其他的;
2、能共用的模块尽量共用;
3、没有用的程序少写。
4.尽量引用最少的单元、不加入debug信息、少使用VCl.
 
不小心进来了。KAO~~~~~~

 
如果不用Forms单元就会小很多,但是要用Api创建Form,
也可以用VC等工具做出Form的资源文件,然后调用。
 
delphi文件大主要有2个部分:
1.VCL类库
2.dfm里面保存的初始化数据,比如memo1里面的初始化文本

如果你用delphi,那么用VCL不可避免(否则免谈),至于初始化数据,无论你怎样
调包也不可避免。

所以,你的想法是狗屁不通。
 
以前看到一个kol的东东,用它做的程序比用vcxl小很多的.
 
以下几方面:
窗体动态创建
合理设置编译选项
检查源代码,减少多余的引用,进行最大限度的优化
 
这么有意义的问题,浪费了真可惜!
Delphi的DFM文件存储了控件的RTTI初始化信息(Publish段),编译的时候以资源的方式
加入EXE文件中,创建窗体的时候在根据资源创建每个控件,并给Publish段中的属性赋值。
RTTI存储的是文本,因此DFM文件也大,这也是Aspack对Delphi执行文件的压缩率比较高的
原因。而如果动态创建,则编译的时候只生成控件相关的符号而已,自然体积减小。

回答问题:
1.写一个什么样的转换程序才能完整解决问题?
目前应该还没有这样的程序,Delphi鼓励使用DFM的,否则就不叫做Visual Pascal了。
自己写一个比较麻烦的,对DFM的格式要非常熟悉,其中含有大量的嵌套,对RTTI也得
非常熟悉,可以参考TReader, TWriter, TPersistant的原码。

2.窗体上的资源(如图片等)怎样动态装载?
图片等二进制流可以用资源方式来保存,装载自然是用LoadResource了。
 
根据DFM创建一个动态的窗体并非难事,DELPHI自己就带的有函数,可以不去了解DFM的格式.
但问题是和这个动态创建的窗体相关的代码编写的复杂程度增加.不能指名道姓的按Name
去写程序,因为在窗体创建前程序里不存在这么个控件,编译都不会过的.你不得不一遍遍地遍历
控件.这样的程序写起来可真累.
 
根本不是动态或是静态创建的问题!
如果是动态创建,反而会使体积变大,因为还增加了动态创建的代码。
体积大是因为包含了VCL代码和很多的提示信息(你们可以通过Delphi的多语言转换功能来
看就知道含有多少东西了),最大的就是Form类。
另外,Delphi7编译出来的东西比delphi6小些。
 
delphi是可以编译出比VC更小的程序来的,在Project 菜单的Project operation中点击Packages
选中build with runtime packages 就可以啦,不过这个程序如果在别的机器上运行的话,这台机器
必须安装有delphi。
VC之所以比DELPHI编译出的执行程序小,是因为VC是建立在windows的基础上的,他的控件库都已经集成到
操作系统中啦,而DELPHI却不一样,优秀强大的VCL必须要包含在packages中才可以方便的移植。
如果你用纯pascal或windows api写的话,你会发现生成的执行程序会小得多。
学delphi你要坚信一点,同样的功能实现代码pascal生成的代码比c和c++的都小,编译速度也要快得多。
这是不可改变的事实。想确认的话,可以在网上找一下。
那些个说聪明的程序员用DELPHI,真正的程序员用VC,***是傻B,操。
废话了半天,俺收工。
 
后退
顶部