所在单元: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