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

  • 主题发起人 主题发起人 yayongm
  • 开始时间 开始时间
Y

yayongm

Unregistered / Unconfirmed
GUEST, unregistred user!
注意:Aspack,UPX,KOL不在讨论范围,如果有人转载,请标明作者Email:yayongm@sohu.com
原理思想:Delphi可执行文件很大的原因主要是由于dfm文件造成的.而dfm文件中主要是窗体上
的控件保存后的初始化数据,要减小delphi可执行程序的大小,可不可以从dfm文件入手呢?
简单点:就是把dfm文件中自动创建的控件用程序读出来,然后自动生成一个名为CreateControls的
过程,将该过程放入窗体的Create过程中,然后删掉窗体上所有的控件,变自动创建控件为手工创建.
窗体仅仅只有一个窗体.推广一点,可不可以让DPR仅仅是一个DPR,不包含任何窗体.让窗体也自动创建.
问题:1.写一个什么样的转换程序才能完整解决问题?
2.窗体上的资源(如图片等)怎样动态装载?
解决:欢迎高手讨论该问题,也请大家同我联系,如有解决方案,Email我.

 
动态创建就可以减小大小?我来trytry
 
1、很不赞同你的观点,本来使用dfm,就为我们减轻了很大的负担,为什么要动态生成?
而且,不应该是因为dfm是静态生成的,参数过多导致文件庞大,个人认为是Delphi编译机制在作怪。
他use了一个pas文件,或者dcu,即使没有用,他也会加入到可执行文件里面(这和早期的 VB类似),
所以可以认为他是将dcu文件一古脑复制到可执行文件里面(没有确认),因此造成很多垃圾。这可能是Delphi程序比较大的一个原因。
另一个原因是他的防出错以及出错处理机制,我想这也应该耗费了比较大的空间。
 
你准备把form的资源放在单独的文件里面嘛?如果是这样,和vc有什么区别?:《
 
如果全部都自己做,很累的咧!
 
>他use了一个pas文件,或者dcu,即使没有用,他也会加入到可执行文件里面(这和早期的 VB类似),
>所以可以认为他是将dcu文件一古脑复制到可执行文件里面(没有确认),因此造成很多垃圾。这可能是Delphi程序比较大的一个原因。
若DELPHI这么做的话,不是他是SB,就是我们是SB [:D]
 
1、能用API的,不用其他的;
2、能共用的模块尽量共用;
3、没有用的程序少写。
4、按照我以上的废话去做。
 
动态建立一个btn,文件大小变大了 :< 为什么?
 
  delphi程序中use一个单元A后,一般长度增加A.dcu的长度。因此,如果能把A中
没用到的代码去掉,就可以减少程序的大小。但怎么做的话,可能工作量不是一般的
大。  ^_^
 
谁知道delphi的编译原理哦!
 
我认为delphi程序过大主要是因为使用vcl组件。考虑一下一个组件有那么多方法属
性事件,可并不是每一个都用到。
 
楼上的说得有道理。
关于发贴者的思路,当然,也可以,解决如下:
因为dfm文件文本格式是一种标准的类似XML的格式,解析很好办。
建一个向导,编译的时候去掉窗口引用,并且加入CreateControls方法,
图象的处理,要么直接使用Data,要么建一个向导,修改窗口图象连接的属性编辑器,
增加一个成员来保存图象文件的路径,当然,又得加入图象装载的代码。
 
1/去掉 USES 不用的单元;
2 BUDILD WITH RUNTIME PACKAGE(最大化利用了VCL包公用原理,去掉不用的包)。
然后看看你工程现在的尺码?

 
dfm并不大(放置了图片除外),看看dfm的内容,以及用resource workshop看看就知道,他并不大
大的是vcl支持,只要用了vcl,大是免不了的了
 
我认为drummer的说法不对。use的单元如果没有用到其中的任何函数和对象,那么它
并不会包含到最终的执行文件中,现在只要是象样一点的编译器都支持这种优化。
Delphi程序大的一个主要原因是VCL是一个类库,其中大量使用了虚拟方法和动态方法,
因为编译器在编译程序的时候无法决定到底那些会被用到,所以必须将所有虚拟方法
的相关代码连接到文件里面,造成文件庞大(这也是几乎所有类库的通病)。
 
没有完美的方法。
尽量引用最少的单元、不加入debug信息、少使用VCl.
 
[h4][red]我的妈呀,太恐怖了,居然有这么多人连VCL最基本的机制都没有搞清楚就
***大叫非高手莫入!我靠!
居然还“如果有人转载,请标明作者”,我倒倒倒倒倒倒倒倒倒......
如果有人转载这种东西会他妈的被人踩死!死的不能再死!!!

乌烟瘴气!乌烟瘴气!乌烟瘴气!
靠的,终于知道DFW为什么人越来越多,水平却他妈的一泻千里了。
看看老虫子还胜几个了,就是被你们这帮非高手莫入的家伙吓跑了!!![/red]
[/h4]
 
多举双手[red]同意[/red]
 
大哥,如果嫌大的化,用VC算了吧!还有你那捣腾的功夫,还不如VC简单明了!
请问一句,如何体现delphi的rad之处呢?
 
做广外女生的那个家伙来这里吗?问问他,他的木马很小耶,delphi的,哈哈哈,谁有广外女生
的源代码,我花200块钱买,真的给钱哦,我有召行的卡,可以汇过去~~~~
 
后退
顶部