什么时候Delphi应用程序对于单个EXE来说太大了?

Pat*_*ney 11 delphi delphi-xe

如果我将整个Delphi应用程序编译为单个exe文件,那么该文件将增长到5MB,10MB,甚至更多.什么时候那么大?这有什么问题?这是一个商业应用程序,目前在Delphi XE上.

我知道使用运行时包构建的选项.这听起来是个好主意,但我在这里看到的评论指出存在一些问题和缺点.

Joh*_*ica 32

Delphi应用程序永远不会太大.
但是,exe越大,重新分发文件就越困难.
此外,如果可执行文件位于网络磁盘上,则启动时间可能会受到影响.

许多因素使得exe增长:

  • 启用调试信息(将或多或少地加倍exe大小).
    在此输入图像描述
    禁用在最终exe中包含调试信息(参见上面的屏幕截图).
  • 包括位图(在一个imagelist或同样的组件中)也将基本上增加exe.
  • 包括资源(使用自定义*.res)文件将增加大小.

我建议不要将资源放在一个单独的dll中.
这会使您的应用程序复杂化,同时不会减少加载时间和分发问题.
必须关闭生产代码中的调试信息.
如果您有Delphi-2010或更新版本,您可以选择以png格式包含图像.
这比旧的skool位图占用的空间要少得多.

只要您的应用程序低于30 MB,我就不会担心文件大小过多.

剥离RTTI信息
David建议剥离RTTI信息(这将禁用实时绑定和其他一些高级内容),请参阅:减少exe文件
根据David,它可以节省大约30%的exe大小.

Exe-size只会增加加载时间
更重要的是应用程序分配为存储的数据量.
您在此处使用(或浪费)的空间量将比原始exe大小对应用程序的性能产生更大的影响.
在Delphi中找到"非泄漏"内存使用问题的策略或工具?

更好的优化方法是确保不泄漏资源
如何仅在调试模式下激活ReportMemoryLeaksOnShutdown?
Windows API调用内存泄漏检测

使用智能数据结构和算法
这里过于笼统,无法真正缩小范围,但使用的算法O(缓慢增加)超过O(浪费增加).
8岁儿童的大O?
并尝试通过仅获取所需数据而不是您可能需要的所有数据来限制内存使用,但可能永远不会.
Delphi数据结构

  • 写得好,但大多数回答了一个不问的问题......我想知道你是如何想出> 30MB的.. (2认同)

Mic*_*ael 4

我不知道应用程序的 exe 大小有任何问题。我目前正在开发一个应用程序,其 exe 大小约为 60MB,没有问题。
我知道的唯一限制是可用内存的限制。使用运行时包的应用程序将消耗更多的工作内存,因为所有运行时包都是在应用程序启动时加载的。这些软件包包含许多您的应用程序中可能不会使用的代码。
我真的很喜欢运行时包的想法,但我不喜欢 Delphi 中的实现。一个主要缺点是您必须将应用程序与一堆软件包一起发布,这使得维护变得困难。