最近我经过长时间的停顿后回到Delphi并编写了一个相当简单的实用程序应用程序,我的客户请求支持旧版本...
我知道这些日子的大小并不重要,但令我感到奇怪的是,单元应用程序在编译时达到1'084'416 b可执行文件。我写的唯一.pas单位是大约20.8k,主要是因为gui的丰富。
uses
子句如下:
uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, strutils,
Dialogs, ADODB, DB, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Grids, Menus,
Buttons;
我想知道是否有任何方法可以将应用程序的大小减少到300-400k或更少?
答案 0 :(得分:17)
您是否进行了调试或发布版本? (将其发布为较小的尺寸,确保优化已打开,调试信息已关闭)
如果不需要,您是否关闭了RTII(delphi 2010及以上版本)? (EXE尺寸越小。)
主单元的uses子句中的单位数量,不是猜测EXE大小的好方法。可以这样想:VCL本身是一大堆代码,数据库层是另一种,而你写的东西可能只是EXE大小的一小部分。
要了解您的可执行文件大小,请尝试使用JCL Project Analyzer,或者阅读打开Map选项时生成的MAP文件。这将告诉您可执行文件中的确切内容。
由于各种原因,这将是愚蠢的,但你可以通过使用Delphi 7获得更小的可执行文件。最后,当我创建一个应用程序而我想让它变小时,我会看看需要花多少时间,以及重建所有内容需要多少努力(例如使用vcl替代方案)然后我对自己说,忘了它
答案 1 :(得分:13)
答案 2 :(得分:8)
MapFileStats(DelphiTools.info)是一个很好的(免费)工具,可以让你看到每个单元在你的可执行文件中占用多少空间。我自己的工具DelphiUnitSizes是一种替代方案,除了单位大小外,还显示每个函数或类的大小。
Delphi 2010使默认可执行文件大约增加了30%,可能是因为RTL / VCL单元中包含RTTI,因此您可以使用较旧版本的Delphi来实现较小的exe大小。
正如其他人所提到的UPX也是一个很好的工具,在我的经历中,病毒扫描者的误报并不常见。
使用自定义系统单元和UPX压缩可以大大减少Delphi可执行文件的大小。我可以使用基于Delphi的游戏生成器ZGameEditor生成大小小于64kb的exe文件,即使使用Delphi Berlin也是如此。
答案 3 :(得分:6)
您的DFM有多大?它作为EXE中的资源包含在内。根据GUI的复杂程度,您可能会发现在运行时使用代码创建GUI可能会减小EXE的大小。
答案 4 :(得分:3)
您也可以考虑将以下行添加到项目文件的顶部:
{$SetPEFlags 1}
此处的说明:http://hallvards.blogspot.fr/2006/09/hack12-create-smaller-exe-files.html
答案 5 :(得分:2)
是的,但是您需要提供其他代码单元作为附加文件。正如.net需要程序集,你有VB运行时等,这只是Delphi运行时 - 但它嵌入在exe中。
另一种选择是压缩可执行文件,有可用的工具。
答案 6 :(得分:1)
你说你要回德尔福了。如果您仍有旧版本可用,请使用它 - 每个新版本都会添加额外的功能,如果您不需要它们,那么没有它们的情况会更小。
确保您只包含实际使用的单位。
但无论你做什么,我都非常怀疑你会降到300k。如果内存服务,即使是Delphi 2中的“hello world”应用程序也会比这更大。
答案 7 :(得分:0)
您是否有链接到项目中的资源文件或图片?
我认为ADODB还包括一些开销。如果您的应用程序确实使用了数据库,那么仅1MB对于文件大小来说并不算太糟糕?不要忘记你的应用只是这个exe - 不需要额外的dll等。