我在Delphi 10.2 Tokyo中使用TStopWatch进行高精度计时。以下是来自https://www.thoughtco.com/accurately-measure-elapsed-time-1058453网站的示例:
var
sw : TStopWatch;
elapsedMilliseconds : cardinal;
begin
sw := TStopWatch.Create() ;
try
sw.Start;
//TimeOutThisFunction()
sw.Stop;
elapsedMilliseconds := sw.ElapsedMilliseconds;
finally
sw.Free;
end;
end;
显然,有一个错误,因为:
StopWatch
没有包含Free
- Delphi 文档明确说明:
TStopwatch
不是一个类,但仍需要显式初始化[使用StartNew
或Create
方法]。
这很令人困惑。我在一个函数中使用了 TStopWatch
,并且没有使用 free
。这个函数可能在每个会话期间被调用多次(根据用法可能会有数百次)。这意味着将创建多个 TStopWatch
实例,而不被释放。
是否存在内存泄漏或其他复杂情况的可能性?如果答案是肯定的,那我该怎么办?我必须为每个应用程序创建只有一个实例的 TStopWatch
吗?还是应该使用其他函数?或者其他方法?
TStopWatch.Create
和TStopWatch.StartNew
之间的重要区别在于前者创建了一个停止状态的秒表,而后者创建了一个启动状态的秒表。两者都有各自的用途,例如在循环中以start
和stop
命令包围的行的重复累积计时时,使用TStopWatch.Create
进行准备;其他人已经提供了使用StartNew
的用例。阅读文档是值得的。 - Tom BrunbergTStopWatch.StartNew
替换了TStopWatch.Create
。现在,我明白我应该使用前者。感谢您提供的信息。 - blackcanopus