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

qzwqbdag  于 2022-12-12  发布在  其他
关注(0)|答案(1)|浏览(132)

目前我正在做一个 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 interceptors,但这只适用于拦截外部调用。
是否可以测量每行或每个过程的累计执行时间?而无需在整个代码中添加秒表或分析调用。
先谢谢你了。

vcudknz3

vcudknz31#

我个人推荐使用SamplingProfiler(这个网站已经过时了--它可以很好地处理最新 Delphi 版本的可执行文件,它可能不仅仅是自动选择搜索路径)。它通常可以完美地处理单个可执行文件(需要td 32或map文件),但不能很好地处理额外的运行时包或DLL。
为此,我建议使用Intel VTune(完全免费)。要使其工作,您需要为任何您想要正确信息的二进制文件生成pdb文件(否则它将只报告地址)。这可以通过map2pdb来完成。
如果你有一个AMD的CPU,你可能想尝试AMD μProf-我没有个人经验,但从我听说它不如VTune。

相关问题