为什么不用ASPack压缩exe呢?压缩后只是exe变小了,功能什么的没影响

解决方案 »

  1.   

    把bpl包分隔出来,带包发布,如果项目中有多个EXE程序的话,肯定能减小整个项目的总大小,如果只有一个EXE,那还是可以减小EXE的
      

  2.   

    带包编译,比较麻烦。据说关闭rtti可以减少目标文件大小。
      

  3.   

    关闭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就会更小了。本文来自Delphi园地,转载请标明出处:http://www.delphifans.com/InfoView/Article_6493.html
      

  4.   

    1.别带包了,多年软件开发经验,带包只会增加维护更新的麻烦;(尤其是修改基础包时,有可能所有包都要重新编译)
    2.单个EXE文件维护效率最高;
    3.带包文件只会更大;
    4.用包的唯一好处就是多人开发方便.
      

  5.   

    最近我也在缩小程序的体积.我发现还是用D7 体积才能小.  基本上你你要是想缩小体积.  那是没门滴..//=====================我现在做的对体积要求很严格,没办法, D7 我都觉得大了...
    那些说 UPX, ASPACK 的都不靠谱..  没有实际意义...
      

  6.   

    不能乱教!分隔包是可以缩减项目大小的,对于就只有一个EXE的小型项目,那当然没有分隔包的必要,如果项目中有多个EXE或DLL,这时分隔一些公共包的话就相当于把每个文件中共用的部分剔出来,只存在一份,对整个项目的体积缩减是非常明显的。
      

  7.   

    用包有几个目的,减少目标程序大小,在文件级共用类,接口等,但注意最好不要bpl与dll混用。
    其实,bpl是一种比dll更先进的技术,可惜当初宝兰敌不于微软。
      

  8.   

    使用XE6,新建一个EXE就10M。真心的大啊
      

  9.   

    XE6你那是生成的debug版本吧,release版本没那么夸张