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

时间:2011-11-18 14:24:52

标签: delphi delphi-xe

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

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

3 个答案:

答案 0 :(得分:32)

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

许多因素使得exe增长:

  • 启用调试信息(将或多或少地加倍exe大小)。
    enter image description here
    禁止在最终的exe中包含调试信息(参见上面的屏幕截图)。
  • 包括位图(在imagelist或类似组件中)也将基本上增加exe。
  • 包括资源(使用自定义* .res)文件将增加大小。

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

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

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

执行尺寸只会增加加载时间
更重要的是应用程序分配为存储的数据量 此处使用(或浪费)的空间量将比原始exe大小对应用程序的性能产生更大的影响。
Strategy or tools to find "non-leak" memory usage problems in Delphi?

更好的优化方法是确保不泄漏资源
How to activate ReportMemoryLeaksOnShutdown only in debug mode?
Windows API calls memory leak detection

使用智能数据结构和算法
它太普遍了,不能在这里真正缩小它,但使用O(缓慢增加)的算法优于O(浪费增加)。
Big-O for Eight Year Olds?
并尝试通过仅提取您需要的数据而不是可能需要但可能永远不会的所有数据来限制内存使用量。
Delphi data structures
等等。

答案 1 :(得分:4)

我不知道应用程序的exe大小有任何问题。我目前正在申请exe大约60MB的应用程序,没有问题 我所知道的唯一限制是可用内存的限制。使用runtime-packages的应用程序将消耗更多的工作内存,因为所有运行时包都在应用程序启动时加载。并且包中包含很多代码,这些代码在您的应用程序中可能没有使用 我非常喜欢运行时包的想法,但我不喜欢Delphi中的实现。一个主要的缺点是你必须运送你的应用程序与一堆软件包很难维护。

答案 2 :(得分:1)

使用RELEASE Build来减少执行大小,提高性能。另外使用运行时包来减少exe文件,但是使用运行时包会导致增加包(设置)文件大小。