[英]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.