代码之家  ›  专栏  ›  技术社区  ›  Peter Perháč

如何实现较小的可执行文件大小?

  •  13
  • Peter Perháč  · 技术社区  · 16 年前

    最近,经过长时间的停顿,我回到了Delphi,并编写了一个相当简单的实用程序应用程序,我的客户要求它支持一个较旧的版本。。。

    这个 uses 条款如下:

    uses
      Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, strutils,
      Dialogs, ADODB, DB, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Grids, Menus,
      Buttons;
    

    我想知道是否有任何方法可以将应用程序的大小减少到300-400k或更少?

    8 回复  |  直到 16 年前
        1
  •  17
  •   Warren P    9 年前
    1. 您是否进行了调试或发布构建(将其发布为更小的大小,确保已打开优化,已关闭调试信息)

    2. 在主单位的uses子句中,单位数不是猜测EXE大小的好方法。可以这样想:VCL本身是一个大量代码,数据库层是另一个,而您编写的内容可能只占EXE大小的很小百分比。

    3. 要了解可执行文件的大小,请尝试使用JCL项目分析器,或者读取打开MAP选项时生成的MAP文件。这将准确地告诉您可执行文件中的内容。

    出于各种原因,这可能会很愚蠢,但您可以通过使用Delphi7获得更小的可执行文件。最后,当我制作一个应用程序,并且我想把它变小时,我会看看它需要多少时间,以及重建所有东西需要多少努力(比如使用vcl替代品),然后我对自己说,忘了它吧。

        2
  •  13
  •   T.Todua Laurent W.    7 年前
    • KOL (关键对象库是一组用于开发power的对象(但是 小的 )使用Delphi但不使用VCL的32位Windows GUI应用程序)。KOL允许创建非常紧凑的Windows32 GUI应用程序(从~11K开始,无需压缩-如果建议使用系统单元更换)。大部分代码都转换为内置汇编程序。

    • UPX .

        3
  •  8
  •   Ville Krumlinde    9 年前

    MapFileStats (DelphiTools.info)是一个很好的(免费)工具,它允许您查看每个单元在可执行文件中占用的空间。我自己的工具 DelphiUnitSizes

    Delphi 2010使默认可执行文件大了约30%,这可能是因为RTL/VCL单元中包含RTTI,因此您可以使用旧版本的Delphi来减小exe大小。

    UPX 也是一个很好的工具,在我的经验中,VirusScanner的误报并不那么频繁。

    Delphi可执行文件的大小可以通过使用自定义系统单元和UPX压缩大大缩减。我可以使用基于Delphi的游戏生成器生成小于64kb的exe文件 ZGameEditor ,即使是柏林德尔福。

        4
  •  6
  •   Jim McKeeth    16 年前

    你们的DFM有多大?它作为资源包含在EXE中。根据GUI的复杂程度,您可能会发现在运行时用代码创建GUI可以减少EXE大小。

        5
  •  3
  •   philnext    13 年前

    您还可以考虑在项目文件的顶部添加以下行:

    {$SetPEFlags 1}
    

    解释如下: http://hallvards.blogspot.fr/2006/09/hack12-create-smaller-exe-files.html

        6
  •  2
  •   Lucero    16 年前

    是的,但是您需要提供其他代码单元作为附加文件。正如.net需要程序集,并且有VB运行时等,这只是Delphi运行时,但它嵌入在exe中。

    另一个选择是压缩可执行文件,有很多工具可以实现这一点。

        7
  •  1
  •   Mike Sutton    16 年前
    • 确保你只包括你实际使用的单位。

    但无论你做什么,我都很怀疑你能减到30万。如果内存可用,那么即使是Delphi2中的“hello world”应用程序也会比它大。

        8
  •  0
  •   Birger    16 年前

    我认为ADODB还包括一些开销。如果你的应用程序真的使用了数据库,那么仅仅1MB对于文件大小来说不是很糟糕吗?别忘了你的应用程序就是这个exe-不需要额外的dll等。