可能的重复:
减少EXE文件
给定一个EXE文件,有哪些工具删除所有未使用的代码,并使用应用程序真正使用的代码制作一个新的EXE文件?我认为应该存在类似的东西。只是为了好奇;但是我认为它可以作为生产较小的EXE文件而没有未使用的代码的工具。
P.S。:Delphi生成独立的EXE文件,其中包含应用程序中使用的所有对象的代码,但并非该对象的所有元素都真正使用了。这是大文件。我记得Pascal的第一个版本,它仅包含真正使用的代码,并且未插入未使用的代码,EXE文件较小。
当前的德尔菲还排除未使用的代码。您可以在Delphi中轻松看到这一点。如果编译,则在代码的排水沟中获得"蓝点"。未使用的功能没有蓝色点,这意味着它们被排除在外。如果您在项目选项中检查优化复选框,则将重写代码以更多地使用寄存器,从而消除某些变量。
但是,使用某些单元时,Delphi可执行文件会增长,Especiall。我认为您可以在Delphi 7中创建的最小的.exe约为10KB。在以后的版本中,这可能会更大。
文件大小的重要原因是
- 资源。大或大量图像会占用很多空间。如果您在多个表单上使用图标,请确保将它们放入中央图像列表(在共享数据源上)。使用可用的PNGimageList实现之一,以实现较小的图像尺寸,而质量更高。
- rtti。运行时类型的信息导致类定义消耗额外的空间。这个空间部分归因于有关类的元信息,但主要是因为所有额外的代码。可以使用RTTI称为的任何方法都可以以一种"晚期"的方式绑定。因此,编译器不知道是否可以消除这些方法,因此需要将它们包括在可执行文件中。
- 注册课程。类似于2。如果注册了一类,则可以使用其名称作为字符串进行获取和实例化。这些类必须包括在项目中,即使从未使用过,仅仅是因为编译器不知道是否需要它们。
这是一个事实,即最近的Delphi版本扩展了RTTI。我认为这也会导致RTTI元信息有关类的信息,以消耗更多空间。您只能做很多事情。
一般而言,我认为Delphi编译器仍然进行了很多优化。您不必担心EXE文件大小。如果这样做,可以尝试像upx
这样的包装器。我在UPX方面有很好的遗嘱。它将可执行文件降低到其原始大小的五分之一或以下,同时保留所有功能。
如果您的应用程序很大,请检查是否没有很多调试信息。尝试发布构建并检查是否较小。
我有时要做的是将项目配置为将所有.dcu文件编译到一个文件夹中。这样,您很快就会看到所有无用的单元都被编译到您的.exe中。通常会碰到您为一个功能包含一个单元,但进而获得一整棵依赖单元树。您只需要搜索您的用途条款,并尝试以某种方式摆脱这些依赖项。
我认为Gexperts和CNPACK都包含显示依赖性的工具,或者扫描项目中未使用的单元。他们可以对此有所帮助。
删除了无用的依赖项后,您可以随时使用UPX压缩编译的EXE。这是有缺点的(Barry Kelly在不久前写了关于它的文章),但是我对此有很好的经验。有时它使文件4x很小,这可能很重要。