使用`TStopWatch`没有'free`

bla*_*pus 4 delphi timer stopwatch

TStopWatch用于Delphi 10.2东京的高精度计时.

本网站: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;
Run Code Online (Sandbox Code Playgroud)

显然,那里有一个错误,因为:

  • StopWatch 不含 Free
  • Delphi文档明确指出:

TStopwatch不是类,但仍需要显式初始化[using StartNewCreatemethods].

这令人困惑.我TStopWatch在一个函数中使用,我没有使用free.在每个会话期间可以多次调用此函数(可能数百次,具体取决于用法).这意味着TStopWatch将创建多个实例,而不会被释放.

是否存在内存泄漏或其他并发症的可能性?如果答案是肯定的,我该怎么办?我是否只需要为TStopWatch每个应用程序创建一个实例?或者我应该使用其他功能?或者是其他东西?

LU *_* RD 8

链接的示例TStopWatch基于类.

unit StopWatch;
interface
uses 
  Windows, SysUtils, DateUtils;

type 
  TStopWatch = class
  ...
Run Code Online (Sandbox Code Playgroud)

它是在德尔福推出基于记录之前发布的TStopWatch.

由于类变体需要Free在使用后调用,而基于记录不需要调用,所以这里没有混淆.

只需继续使用Delphi记录,TStopWatch无需在使用后将其释放.

通常我使用以下模式:

var
  sw : TStopWatch;
begin
  sw := TStopWatch.StartNew;
  ... // Do something
  sw.Stop;
  // Read the timing
  WriteLn(sw.ElapsedMilliseconds);  
Run Code Online (Sandbox Code Playgroud)