2009-12-14 55 views
9

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

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

+1

我也很好奇。我使用EurekaLog,它的内存泄漏能力不起作用,除非你没有运行时软件包。所以我花了几天的时间来消除它的需要。因此,为了增加您的问题,我也很好奇是否值得为调试版本构建WITH运行时软件包,以及是否需要构建版本,如果是这样,那又怎么办? – lkessler 2009-12-14 02:55:53

回答

14

当您使用运行时软件包进行构建时,VCL和RTL将从软件包中加载,因此它们的代码不必链接到EXE中。因此,EXE会变小,但总体安装会变得更大,因为您无法使用智能链接来减小包的大小。

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

+5

如果你打算在一台使用VCL的机器上运行许多不同的应用程序也是有益的 - 无意义的将它加载到内存中多次。 – 2009-12-14 06:10:34

+1

+1即使在插件可能需要它们的场景中,您几乎总是设计它们时不需要运行时包。因为当你在一个新的Delphi版本中构建应用程序时,这些插件将全部被破坏,喵:你永远无法升级到更新的工具,插件作者不能。 – 2009-12-14 06:13:11

+1

除了在大多数PC上有千兆字节的RAM之外,版本问题以及从我的路径中的某处(DLL地狱== BPL地狱)加载错误的BPL的想法带来的麻烦使得很多人不希望使用此类实践中的一项技术。如果BPL可以被信任只在本地加载,并忽略系统PATH环境,那么完全“侧向”运行的能力会很好。 – 2009-12-14 15:03:45

0

不知道D2010,但在D2006中,项目菜单中有一个名为“ProjectName的信息”的选项。

这会告诉你编译后包含哪些软件包。然而,正如梅森所说,使用运行时软件包没有什么优势,还有很多缺点。

9

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

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

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

+0

典型的4GB内存有多少填满?无论如何,它仍然适用,因为缓存也是内存,而且相当昂贵。不过,我认为更多的是理论上的情况,因为并非所有的RTL/VCL页面都是活动的。 – 2009-12-14 08:14:06

+1

那么,打电话给我老派,但有足够的记忆是不够的理由浪费它。这种想法给我们带来了今天软件的抱歉状态。与我的第一台PC相比,我现在的机器拥有4000倍的RAM和20000倍的硬盘空间,但是感觉所有这些额外资源中的大部分都被浪费了...... – mghie 2009-12-14 08:45:10

+0

我原本来自化学,没有替代测量和对大小的感觉。这种感觉比膝盖“垃圾”反应更强。 – 2009-12-14 08:50:17

1

使用运行时软件包的主要原因之一是,当您需要使用模块粒度在不接受大型文件的介质上进行部署/更新时,例如通过低带宽线路进行部署/更新。

因为运行时软件包保持不变,直到你改变你的Delphi版本为止 - 就像那些还在D7上的人一样永远不变 - 它允许在没有RTL/VCL有效载荷的情况下部署新版本或新应用程序。

但是和DLL一样,你必须小心版本控制。

+0

这是否意味着如果我“使用运行时软件包构建”,那么我必须单独发运软件包?对不起,如果这是一个愚蠢的问题。 – Snackmoore 2009-12-14 09:24:47

+1

您必须将软件包与您的应用程序一起发货 - 并且在安装时不要覆盖较新版本时要格外小心(更新包也可能会更新tehm)。建议正确检查版本的好安装程序。 – 2009-12-14 09:56:20

+1

snackmoore,大多数Delphi开发人员永远不会在运送给客户的最终版本上构建运行时包,除非他们也想让自己的工作更加困难。 BPL软件包让你的生活更加艰难,除非你真的需要它们(其他答案告诉你为什么你需要它们),那么你就不需要它,所以放手吧。 – 2009-12-14 15:01:38

3

关于您的问题“安装中应包含哪些文件”:您可以使用Dependency Walker来追踪库依赖关系。

相关问题