Delphi 链接包时会发生什么?
Delphi what happens when linking packages?
我一直致力于将一个巨大的项目分解成多个小部分,为每个部分创建一个包 (dpk) 并将应用程序配置为 "Use Runtime Packages"。我在 link 使用其中一个使用其他软件包的软件包时遇到问题。 link 花费的时间太长了。
我的印象是,当一个包 (A) 需要另一个包 (B) 时,该依赖关系仅在运行时解决,但显然情况并非完全如此,因为如果从 "requires" (A) 部分,(A) links 在正常时间内,但否则需要 30 分钟或更长时间。
所以我的问题是,当 Delphi 正在 link 一个需要另一个包的包时到底发生了什么?
链接包时,无论是运行时还是设计时,链接对象中的所有依赖项都需要解析。与运行时包的唯一区别是它们在运行时 加载,因此它们最终可以减少重复使用公共元素的可执行文件(或可执行文件套件)的大小。但是,链接行为保持不变,因此如果链接是您构建中的瓶颈,那么即使您从使用 DCU 切换到运行时包,这也不会改变。
如果链接 是 应用程序中的瓶颈,那么您可以利用一些架构重构策略来简化构建,但这是一个广泛的话题,超出了此答案的范围。
我一直致力于将一个巨大的项目分解成多个小部分,为每个部分创建一个包 (dpk) 并将应用程序配置为 "Use Runtime Packages"。我在 link 使用其中一个使用其他软件包的软件包时遇到问题。 link 花费的时间太长了。
我的印象是,当一个包 (A) 需要另一个包 (B) 时,该依赖关系仅在运行时解决,但显然情况并非完全如此,因为如果从 "requires" (A) 部分,(A) links 在正常时间内,但否则需要 30 分钟或更长时间。
所以我的问题是,当 Delphi 正在 link 一个需要另一个包的包时到底发生了什么?
链接包时,无论是运行时还是设计时,链接对象中的所有依赖项都需要解析。与运行时包的唯一区别是它们在运行时 加载,因此它们最终可以减少重复使用公共元素的可执行文件(或可执行文件套件)的大小。但是,链接行为保持不变,因此如果链接是您构建中的瓶颈,那么即使您从使用 DCU 切换到运行时包,这也不会改变。
如果链接 是 应用程序中的瓶颈,那么您可以利用一些架构重构策略来简化构建,但这是一个广泛的话题,超出了此答案的范围。