我想知道以下使用单位顺序是否正确。
uses
FastMM4 in 'Fast\FastMM4\FastMM4.pas',
VCLFixPack in 'VCLFixPack.pas',
FastMove in 'Fast\FastMove\FastMove.pas',
FastCode in 'Fast\FastCode\FastCode.pas',
FastMM4Messages in 'Fast\FastMM4\FastMM4Messages.pas',
为什么我要为订单烦恼?
答案 0 :(得分:7)
可能有以下几个原因:
请注意,不保证订单会被保留。如果其中一个单元使用另一个单元,则必须首先加载该单元。要使单元真正成为第一个,请将其作为.dpr
或.dpk
文件中的第一个。
答案 1 :(得分:5)
这里有三段独立的代码:
在执行任何堆分配之前,安装替换内存管理器FastMM非常重要。所以我认为很明显,必须是第一个包含的单位。你也可以将两个FastMM单元放在一起。
其他单元更改内存中的代码,修复错误(VCLFixPack)或提高性能(FastCode)。虽然您已单独确定FastMove
和FastCode
,但实际上FastCode
单元实际上安装了一套改进的功能,这些功能是在十几个单独的单独单元中定义的。
在包含VCL单元之前安装VCL修复程序似乎很可能很重要。所以VCLFixPack应该出现在任何VCL单元之前。
对于FastCode,因为它只影响性能,所以你可以很好地在.dpr文件中的任何一点使用它。初始化代码是否与vanilla RTL代码一起运行可能无关紧要。也就是说,为了保持一致性,将所有这些改变运行时行为的单元放在一起是有意义的。所以我会写这样的.dpr uses子句:
uses
FastMM4 in 'Fast\FastMM4\FastMM4.pas',
FastMM4Messages in 'Fast\FastMM4\FastMM4Messages.pas',
FastCode in 'Fast\FastCode\FastCode.pas',
VCLFixPack in 'VCLFixPack.pas',
....
我将FastCode
放在VCLFixPack
之前,因为逻辑上RTL的级别低于VCL。然而,无论如何都无关紧要。但你必须选择一个,这是我的推理。
我也省略了对FastMove
单位的明确引用。 FastCode
以及许多其他单位使用它,如果您要省略其他单位,您也可以省略FastMove
。