[ZBar]CalcPerf 函数

所在单元:zbar.common

函数功能:计算当前代码段的执行时长(单位为纳秒)

函数参数:

  • AHint:输出性能日志时的提示字符串
  • ACallback:当前代码执行完成时的回调函数,如果不指定,则调用 DefaultPerformanceCallback 输出日志。

返回值:返回当前用于计算应用性能的对象实例接口,如果 EnablePerfCounter 为 false,则返回的是固定的性能计数器,其操作返回的 EscapedTime 属性为应用启动到现在的时间差

备注:与 QLog 中的 CalcPerf 相比,增加了回调,以便用户决定输出内容和方式,而且增加受EnabledPerfCounter 限制,当 EnabledPerfCounter 为 false(Debug 模式默认为 true,Release 模式默认为 false),实际不进行性能统计,以减少对代码的性能影响

示例代码:

1、基本用法

try
  CalcPerf('Try used time');
  ...
finally
end;

上述代码在调试时,将在 IDE 的 Events 输出 Try used time => 100ns 类似的字样。注意只统计的是相应的代码段的性能,因此,要将函数放到正确的作用域范围上。

2、自定义默认输出

用户可以为 DefaultPerformanceCallback 指定一个匿名回调函数,这样上述代码输出时会回调对应的函数,而不是调用系统默认的性能输出函数。

DefaultPerformanceCallback := procedure(APerf: IZPerformance)
  var
    APerfText: String;
  begin
    APerfText := Format('%s 用时 %d ns', [APerf.Hint, APerf.EscapedTime]);
    TThread.ForceQueue(nil,
      procedure
      begin
        OutputDebugString(PChar(APerfText));
      end);
  end;

如上指定了人的输出函数,则运行时将在 IDE 的 Events 中输出 Try used time 用时 100ns 类似的字样。同样您可以在其中指定输出到日志文件中,具体就取决于你自己的实现,默认实现是异步写入系统日志或控制台,取决于具体的操作系统类型。

3、单独控制某一日志的输出

这里有两种方式,一种是指定 CalcPerf 函数的回调函数,然后会自动调用。另一种就是直接将 CalcPerf 的返回值,保存下来,在代码结束处调用直接访问相关的属性。

(1)、单独代码控制

try
  CalcPerf('Try used time',procedure(APerf: IZPerformance)
  begin
  OutputDebugString(PChar('My control code used time:'+APerf.EscapedTime.ToString));
  end);
  ...
finally
end;

上述代码输出 My control code used time:100 这样的字样

(2)、保存变量

var
  APerfCounter:IZPerformance;
begin
  APerfCounter:=CalcPerf('');
  ...
  OutputDebugString(PChar('Step 1 escaped time '+APerfCounter.EscapedTime.ToString));
  ...
end
分享到: