簡體   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