繁体   English   中英

Delphi - 测量单元每行的执行时间

[英]Delphi - Measure execution time per line of an unit

目前我正在研究 Delphi 计算模块 (bpl) 的性能改进 在过去的几天里,我发现了几行缓慢的代码。 我们将执行时间从 8 分钟缩短到 3 分钟。

我通过在所有单元中添加秒表来发现较慢的代码行,但进行这些更改非常耗时

procedure TCalculator.Execute;
begin
  TStopwatchWrapper.Start(1);
  CollectValues;
  TStopwatchWrapper.Pause(1);
  TStopwatchWrapper.Start(2);
  CalculateOrderLines;
  TStopwatchWrapper.Pause(2);
  ...
  TStopwatchWrapper.ShowTimes;

结尾;

procedure TCalculator.CollectValues;
begin
  for {..} do
  begin
    {more timing}
  end;
end;

计算单位为百行。

我希望能够装饰一个单元,找到这些缓慢的代码行。 我在考虑Spring4D 拦截器,但这只适用于拦截外部调用。

是否可以测量每行或过程的累积执行时间 无需在整个代码中添加秒表或分析调用。

先感谢您。

就个人而言,我建议使用SamplingProfiler (该网站已经过时了 - 它可以很好地处理最新 Delphi 版本的可执行文件,它可能不会自动获取搜索路径)。 它通常可以完美地处理单个可执行文件(需要 td32 或 map 文件),但不能很好地处理其他运行时包或 DLL。

为此,我建议使用Intel VTune (完全免费使用)。 为此,您需要为任何需要正确信息的二进制文件生成 pdb 文件(否则它只会报告地址)。 这可以用map2pdb来完成。

如果您有 AMD CPU,您可能想尝试AMD μProf - 我个人没有使用它的经验,但据我所知,它不如 VTune。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM