Warm tip: This article is reproduced from serverfault.com, please click

build process-如何减小可执行文件的大小(Delphi)?

(build process - What Can I Do To Reduce My Executable's Size (Delphi)?)

发布于 2010-07-07 22:43:44

我使用Delphi 2009为桌面程序发布了一个可执行文件(.EXE)。我没有外部DLL或运行该程序所需的资源。

我使用两个组件:LMD Innovative的ELPackSergey Tkachenko的TRichView,它们已编译到我的可执行文件中。

当我使用“发布”构建配置来构建生产版本时,生成的可执行文件为13,533 KB。

在使用Delphi 2009之前,我使用的是Delphi4。它生成的可执行文件只有2,671 KB,同时包含相同的两个组件,并且基本上具有与当前版本相同的代码。

我确实知道Delphi 2009完全是Unicode(这是我升级的主要原因),而成为Unicode可能导致大小加倍。但这大约是它的5倍。

为什么我的可执行文件必须保持5倍大?还是有一些简单的方法可以减少可执行文件的大小?


请注意。有人在回答压缩Delphi EXE的方法。那不是我想做的。我想简单地了解为什么要使用这么多空间来删除​​可能不必要的内容。如果这样做,则压缩仍可以在以后进行。

安装可执行文件后,它的大小实际上并不重要。它用于下载目的,并最大程度地减少要压缩它的服务器负载和下载时间。我更喜欢使用Inno Setup并在安装例程本身内部压缩程序。然后在安装后将其扩展为完整尺寸。这既防止了可能的病毒检测,又消除了解压缩内存中程序所需的额外启动时间。另外,我对可执行文件和安装例程都进行了代码签名,并且某些压缩技术与此不兼容。

有关压缩的更多信息,请参见StackOverflow问题: Delphi EXE压缩器?


ldsandon要求我确切提供我正在使用的选项,所以这里是:

编译选项
(来源:beholdgenealogy.com

链接选项
(来源:beholdgenealogy.com

Questioner
lkessler
Viewed
0
2017-05-23 20:34:04

当从Delphi 7迁移到Delphi 2010.时,我们的.exe文件从16兆增长到35兆。

几周前,我在Embarcadero论坛上提出了一个与你类似的问题。链接)在我的OP中,我列出了与此主题相关的一系列链接,这些链接可能会有所帮助。

我们尝试使用UPX压缩我们的.exe文件。让它工作几个小时会大大减少我们的.exe,但由于以下原因,我们可能不会在生产中使用它:

  1. 我们有很多.exe,并且不想在每个版本上等待1/2天。(有可能我们可以找到UPX的一组非蛮力参数来减少这种情况...)

  2. 尽管.exe的大小减小了,但我们的可交付项却没有,因为我们的安装程序(不足为奇)无法从已经压缩的文件中挤出更多的压缩...而它却能够将原来的16 meg .exe压缩下来到8兆。

  3. 我读过一些报告,说(有时,但并非从来没有),UPX exe触发了各种防病毒程序,以报告该应用程序包含病毒。(我不记得看到它的日期,地点或详细信息,所以我在这里报告它有点不公平。)但是,我们非常反对冒这种可能性发生的风险,以至于UPX不在桌子上...

Embarcadero论坛上的链接还包括指向该主题的另一个SO线程链接

对于在移至Delphi 2010时发现的代码膨胀,我仍然感到惊讶和失望。正如Nick所指出的,Unicode的2X实在是太过分了。

但是,在迁移到D2010时,膨胀只是一个相对较小的折衷,因为IMO在其他许多方面都对D2010进行了如此出色的升级。但是,这确实意味着我们可能不得不转移2张CD而不是一张CD。我不希望看到我们组织对此的 React ...