2

我总是在没有“使用运行时包构建”的情况下编译我的 delphi 应用程序,但是对于我的最新项目,我不得不使用它(因为它一天天开始膨胀)。我使用了一些第三方 VCL(带有源代码的 TMS 组件包,源代码目录也在搜索路径中),

当我使用运行时包构建编译时,整个 bpl 包由应用程序在运行时使用(否则它只将包内所需的 vcls 编译到应用程序中)所以我认为它消耗了很多 ram 内存(通常我的应用程序使用 38 Mb ram 但现在62 Mb(根据 Windows 任务管理器,不仅 tms 我还使用了许多其他 vcl)。

有什么方法可以让我的应用程序消耗低内存,就像它被编译为单个 exe 一样。

(我知道用只需要的 vcl 重新编译 VCL 包(我有源代码)但是挖掘源代码并找出所需的 vcl 和子程序太难了)

4

2 回答 2

8

我认为你测量的是错误的东西。尽管包文件更大,但这并不一定意味着您的程序在 RAM 中占用了更多空间。编译器必须在包中包含所有函数和单元的代码,无论任何给定程序使用哪个部分,但这并不意味着所有代码都加载到内存中。操作系统将加载它需要的页面;其余的将继续驻留在磁盘上,在它来自的 BPL 文件中。整个 BPL 文件将占用地址空间,但不会加载到物理 RAM 中,因此无需担心,除非您真的有使用操作系统授予您的进程的整个 2 GB 地址空间的危险。

于 2010-11-07T16:28:29.750 回答
0

包是 DLL,它们需要加载到内存中才能工作。每个包都将包含构建它的所有单元的代码。因此,它们可以使用比没有运行时包构建的 exe 更多的内存 - 尽管您的增加看起来有点太大了。另一方面,如果多个应用程序使用相同的包并且它们已正确安装,则它们的代码将被加载一次到内存中。您可以构建临时包,但您应该非常小心地使用与标准包不同的名称,否则您可能会破坏其他一些应用程序,特别是如果您将包放在共享位置或路径中的第一个目录中. 在尝试之前,我会检查您的应用程序是否没有链接未使用的包。Delphi 将或多或少地把它知道的所有包都放入选项中。

于 2010-11-07T15:17:09.697 回答