You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测量Delphi编译器各单元编译耗时以优化项目构建?

针对大型Delphi项目编译耗时分析的解决方案

关于Delphi编译模式与时间戳的有效性

Delphi编译器采用依赖驱动的嵌套编译模式,而非简单的顺序编译:

  • 当编译单元A时,若A依赖的单元B需要重新编译(源码有修改或.dcu缺失),编译器会暂停A的编译,优先递归处理B的依赖链,待所有依赖单元编译完成后,才会继续A的编译。
  • 因此,.dcu文件的修改时间戳仅能反映单元编译完成的时间点,相邻单元的时间差会包含其他依赖单元的编译耗时,无法准确计算单个单元的实际编译时间。加上.dcu的创建与修改时间差几乎为零(编译器生成文件的过程极快),通过时间戳分析编译耗时的思路完全不可行。

生成带计时信息的编译日志方法

1. 命令行编译器(dcc32/dcc64)

从Delphi 10.3 Rio及以后版本开始,命令行编译器支持--timing参数,可直接输出每个单元的编译耗时:

# 针对32位项目
dcc32 --timing YourProject.dpr
# 针对64位项目
dcc64 --timing YourProject.dpr

执行后,控制台会输出类似以下的日志,清晰显示每个单元的开始编译时间、结束时间及耗时:

[00:00:00.123] Compiling UnitMain.pas
[00:00:02.456] Finished UnitMain.pas (耗时: 2.333秒)
[00:00:02.457] Compiling UnitUtils.pas
[00:00:03.120] Finished UnitUtils.pas (耗时: 0.663秒)

2. Delphi IDE内置日志

在IDE中开启计时信息显示:

  • 打开Tools > Options(不同版本路径略有差异,如Delphi 11 Alexandria为Tools > Options > Language > Delphi > Compiler > Output)
  • 找到Output设置项,勾选「Show timing information」
  • 重新编译项目,Messages窗口会显示每个单元的编译耗时,可直接排序筛选耗时最长的单元。

3. MSBuild编译(适用于自动化构建场景)

若使用MSBuild编译项目,可结合/verbosity:detailed参数配合编译器的--timing选项,在构建日志中获取计时信息:

msbuild YourProject.dproj /p:DCC_Options="--timing" /verbosity:detailed

内容的提问来源于stack exchange,提问作者kgz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:58:22