我有一个关于Delphi中使用或不使用运行时包构建的选项的查询(Project-> Option-> Packages)。
当我选中“使用运行时包构建”框时,与我取消选中该框(3,521KB)相比,可执行文件大小似乎更小(389KB)。为什么会这样?
我在为它构建安装盘时遇到了很多麻烦,无法确定安装中应该包含哪些文件。我想知道这可能与它有什么关系,但我已经尝试了两种选择。
答案 0 :(得分:14)
使用运行时包构建时,VCL和RTL是从包中加载的,因此它们的代码不必链接到EXE中。所以EXE变小了,但总安装量变大了,因为你不能使用智能链接来减小包的大小。
正如您已经注意到的那样,使用软件包会导致内存泄漏跟踪问题,并且还会导致调试问题。如果您使用的插件也需要运行时包,那么通常只使用它们。
答案 1 :(得分:9)
到目前为止,答案忽略了一个关键点:如果您有一组协同工作并一起安装的应用程序,则运行时包的使用方式与DLL非常有用。您当然可以通过在没有包的情况下构建它们来将VCL和第三方库链接到所有这些库中,但是根据应用程序和使用的库的数量,这些应用程序组合的大小将大于使用运行时软件包构建的大小。这些运行时包的大小。这将使更大的安装程序包,这不是曾经的大问题。
但是同时使用所有这些应用程序也会给系统带来更高的负载。由于每个应用程序都使用自己的VCL副本和其他库,所有这些都需要从光盘加载到内存中,这会导致更多的I / O.然后在内存中会有几个副本,每个副本占用代码空间。当使用运行时包时,每个应用程序都有自己的数据存储区,但它们都将在内存中共享包的代码的相同副本。
对于没有任何特殊需求的单个自包含应用程序,无需在没有包的情况下构建。
答案 2 :(得分:3)
关于“安装中应包含哪些文件”的问题:您可以使用Dependency Walker来跟踪库依赖项。
答案 3 :(得分:1)
使用运行时软件包的一个主要原因是,当您需要通过不接受大型文件的介质(例如通过带宽较低的线路)部署/更新模块粒度时。
因为在您更改Delphi版本之前,运行时软件包保持不变 - 就像那些仍在D7上的人一样永远---) - 它允许部署新版本或新应用程序而无需RTL / VCL的有效负载。
但与DLL一样,你必须小心版本化。
答案 4 :(得分:0)
不了解D2010,但在D2006中,项目菜单中有一个名为“ProjectName的信息”的选项。
这将显示编译后包含哪些包。
然而,正如梅森所说,使用运行时软件包几乎没有什么优势,还有一些缺点。