Delphi 如何减少可执行文件';s码(德尔福)?

Delphi 如何减少可执行文件';s码(德尔福)?,delphi,build-process,executable,Delphi,Build Process,Executable,我使用Delphi2009为桌面程序发布了一个可执行文件(.EXE)。我没有运行程序所需的外部DLL或资源 我使用两个组件:和,它们被编译到我的可执行文件中 当我使用“Release”构建配置构建生产版本时,生成的可执行文件为13533 KB 在使用Delphi2009之前,我使用的是Delphi4。它生成的可执行文件只有2671KB,同时包含了相同的两个组件,基本上与我当前的版本具有相同的代码 我知道Delphi2009完全是Unicode(这是我升级的主要原因),使用Unicode可能会导致

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

我使用两个组件:和,它们被编译到我的可执行文件中

当我使用“Release”构建配置构建生产版本时,生成的可执行文件为13533 KB

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

我知道Delphi2009完全是Unicode(这是我升级的主要原因),使用Unicode可能会导致大小增加一倍。但这个要大5倍左右

我的可执行文件必须保持5倍大,这有什么原因吗?或者有一些简单的方法可以减少可执行文件的很大一部分大小


请注意。一些人正在回答如何压缩Delphi EXE。这不是我想要做的。我只是想看看为什么这么多的空间被用来移除那些可能不必要的东西。如果这样做了,如果需要的话,之后仍然可以进行压缩

一旦安装了可执行文件,它的大小实际上并不重要。它是为了下载,并尽量减少服务器负载和下载时间,你想压缩它。我更喜欢在安装例程内部使用和压缩程序。然后,当它被安装时,它被扩展到全尺寸。这既可以防止可能的病毒检测,又可以消除在内存中解压缩程序所需的额外启动时间。我还对我的可执行文件和安装例程进行了代码签名,一些压缩技术与此不兼容

有关压缩的更多信息,请参阅StackOverflow问题:


ldsandon要求我提供我正在使用的具体选项,因此它们如下所示:


(来源:)



(来源:)

如果将Unicode预期的2倍增长计算在内,那么最终的结果将是2.5倍的增长。考虑到您跳过了多少版本,这是有意义的。自Delphi 4以来,VCL和RTL中添加了很多内容,而且并非所有内容都可以轻松地进行智能链接,即使您从未使用过它。根据你使用的设备数量,你可能会多带一些行李


Allen Bauer和编译器团队补充道,但显然他们在谨慎行事,没有在尽可能多的地方使用它。希望我们能在2011年及以后的版本中看到更多的积垢减少。

如果看不到“发布版”构建配置使用的实际设置来解释尺寸的增加,需要大量的推测

除了一些可能不太可能导致“拖入”的代码量大幅增加(即使未使用)的因素之外,增加的幅度最容易通过包含调试信息来解释

我将检查您的编译器和链接器设置:

  • 调试信息(编译器设置)
  • TD32信息(链接器)
  • 远程调试信息(链接器)

将您的Delphi 2009项目中的这些设置与Delphi 4中的等效设置进行比较。

当从Delphi 7移动到Delphi 2010时,我们的.exe从例如16兆增加到35兆

几周前,我在Embarcadero论坛上问了一个与你类似的问题。()在我的专栏文章中,我列出了一系列关于这个主题的链接,你可能会觉得这些链接很有用

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

  • 我们有相当多的.exe,不想在每个版本上等待1/2天。(我们可能会找到一组UPX的非蛮力参数,以减少这一点…)

  • 虽然.exe的大小减小了,但我们的可交付性没有降低,因为我们的安装程序(毫不奇怪)无法从已经压缩的文件中挤出更多的压缩。。。然而,它能够将原来的16兆.exe减少到8兆

  • 我读过一些报告,在某些时候(很少,但不是永远),UPX exe触发了各种反病毒程序,报告应用程序包含病毒。(我记不起我看到这一切的日期、地点或细节,所以我在这里报告这件事有点不公平。)但是,我们非常反对冒发生这种可能性的风险,UPX是不可能的

  • Embarcadero论坛上的链接还包括一个到另一个SO主题的链接

    我仍然对我们在迁移到Delphi2010时发现的代码膨胀感到惊讶和失望。正如Nick所指出的,Unicode的2X是非常过分的

    然而,在迁移到D2010时,膨胀是一个相对较小的权衡,因为在国际海事组织,D2010在许多其他方面都是一个非常棒的升级。但是,这确实意味着我们可能不得不转向发行两张CD,而不是一张。我不期待看到我们组织对此的反应

    使用“upx-压缩或扩展可执行文件”@


    如果您转到tools/configure tools,并像这样进行设置,您可以通过IDE中的菜单项轻松压缩正在处理的可执行文件


    如果您不想使用exe压缩器,那么您应该试一试。

    另一种方法是查看“什么单位增加了大小?”

    为此,我使用集成在IDE中的JCL“ProjectAnalyzer IDE”和JCL/JVCL安装,它显示了所有单元及其各自的大小。您可以将其导出到文本文件中。
    如果您使用2个环境(D4和D2009),您将获得大量相关信息。

    较新的delphi中的标准单位可能包含更多字符串和常量