13

最近,我在长时间的停顿后回到了 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 或更小?

4

8 回答 8

17
  1. 您是否进行了调试或发布构建?(使其发布为更小的尺寸,确保优化已打开,调试信息已关闭)

  2. 如果不需要,您是否关闭了 RTII(delphi 2010 及更高版本)?(较小的 EXE 大小。)

  3. 您的主要单元的uses 子句中的单元数不是猜测EXE 大小的好方法。可以这样想:VCL 本身是一大块代码,数据库层是另一块,而您编写的东西可能只占 EXE 大小的一小部分。

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

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

于 2010-01-27T21:44:56.527 回答
13
  • 您可以尝试使用KOL(Key Objects Library 是一组使用 Delphi 但没有 VCL 来开发强大(但很小)32 位 Windows GUI 应用程序的对象)。KOL 允许创建非常紧凑的 Windows32 GUI 应用程序(从 ~11K 开始,没有压缩 - 如果使用建议的系统单元替换)。大部分代码被转换为内置汇编程序。

  • 另一种选择是使用像UPX这样的 exe 压缩器。

于 2010-01-27T20:46:50.890 回答
8

MapFileStats (DelphiTools.info) 是一个很好的(免费)工具,可让您查看每个单元在可执行文件中占用了多少空间。我自己的工具DelphiUnitSizes是一种替代方法,除了单位大小外,它还显示每个函数或类的大小。

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

正如其他人提到的那样, UPX也是一个很棒的工具,根据我的经验,病毒扫描程序的误报并不常见。

使用自定义系统单元和 UPX 压缩可以大大减少 Delphi 可执行文件的大小。我可以使用基于 Delphi 的游戏生成器ZGameEditor生成大小小于 64kb 的 exe 文件,即使使用 Delphi Berlin 也是如此。

于 2010-01-28T08:18:25.683 回答
6

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

于 2010-01-27T21:42:41.730 回答
3

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

{$SetPEFlags 1}

此处说明:http: //hallvards.blogspot.fr/2006/09/hack12-create-smaller-exe-files.html

于 2012-12-14T14:54:45.333 回答
2

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

另一种选择是压缩可执行文件,周围有工具。

于 2010-01-27T20:35:09.120 回答
1
  • 你说你要回到德尔福。如果您仍然有旧版本可用,请使用它 - 每个新版本都会添加额外的功能,如果您不需要它们,那么没有它们,您的 exe 会更小。

  • 确保您只包括您实际使用的单位。

但无论你做什么,我都非常怀疑你会降到 300k。如果没有记错的话,即使是 Delphi 2 中的“hello world”应用程序也会比这更大。

于 2010-01-29T19:22:18.307 回答
0

您是否有任何链接到项目中的资源文件或图片?

我认为 ADODB 还包括相当多的开销。如果您的应用程序真的使用数据库,那么仅仅 1MB 对于文件大小来说还不算太糟糕?不要忘记您的应用程序只是这个 exe - 不需要额外的 dll 等。

于 2010-01-28T10:35:17.500 回答