我想知道以下使用单位顺序是否正确.
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',
Run Code Online (Sandbox Code Playgroud)
我为什么要打扰订单呢?
可能有以下几个原因:
请注意,无法保证订单得以保留.如果其中一个单元使用另一个单元,则必须首先加载该单元.为了使单位真正最先,使其成为第一.dpr或.dpk文件.
这里有三个独立的代码:
在执行任何堆分配之前,安装替换内存管理器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',
....
Run Code Online (Sandbox Code Playgroud)
我FastCode之前说过,VCLFixPack因为逻辑上RTL的级别低于VCL.然而,无论如何都无关紧要.但你必须选择一个,这是我的推理.
我也省略了对FastMove单位的明确引用.这FastCode与其他许多单位一起使用,如果你要省略其他单位,你也可以省略FastMove.