为什么使用运行时包构建会使EXE文件更小?

Sna*_*ore 9 delphi installation packages

我有一个关于Delphi中使用或不使用运行时包(Project-> Option-> Packages)构建的选项的查询.
当我选中"使用运行时包构建"框时,与我取消选中该框(3,521KB)相比,可执行文件大小似乎更小(389KB).为什么会这样?

我在为它构建安装盘时遇到了很多麻烦,无法弄清楚安装中应该包含哪些文件.我想知道这可能与它有什么关系,但我已经尝试了两种选择.

Mas*_*ler 14

使用运行时包进行构建时,将从包中加载VCL和RTL,因此不必将其代码链接到EXE中.因此EXE变小,但总安装量变大,因为您无法使用智能链接来减小包的大小.

正如您已经注意到的那样,使用包会导致内存泄漏跟踪问题,并且还会导致调试问题.如果你使用的插件也需要运行时包,通常只值得使用它们.

  • 如果您要在一台使用VCL的计算机上运行许多不同的应用程序,这也是有益的 - 没有意义将它多次加载到内存中. (5认同)

mgh*_*hie 9

到目前为止,答案忽略了一个关键点:如果您有一组协同工作并一起安装的应用程序,则运行时包的使用方式与DLL非常有用.您当然可以通过在没有包的情况下构建它们来将VCL和第三方库链接到所有这些库中,但是根据应用程序和使用的库的数量,这些应用程序组合的大小将大于使用运行时程序包构建的大小这些运行时包的大小.这将使更大的安装程序包,这不是曾经的大问题.

但是同时使用所有这些应用程序也会给系统带来更高的负载.由于每个应用程序都使用自己的VCL副本和其他库,所有这些都需要从光盘加载到内存中,这会导致更多的I/O. 然后在内存中会有几个副本,每个副本占用代码空间.当使用运行时包时,每个应用程序都有自己的数据存储区,但它们都将在内存中共享包的代码的相同副本.

对于没有任何特殊需求的单个自包含应用程序,无需打包即可构建.

  • 你在这里提供的是通过降低稳定性,向后/向前兼容性以及增加复杂性和无数相互依赖性问题来交换几兆内存(不超过20MB用于**插件!).BPL适用于IDE,因为它已经有限制,只能使用一个RTL/VCTL /编译器.不要对你的应用程序这样做. (2认同)