假设我有一个proc,proc 由几个语句和函数调用组成。我怎么知道这个功能到目前为止花了多少时间?
4 回答
一个非常粗略的例子是这样的:
set TIME_start [clock clicks -milliseconds]
...do something...
set TIME_taken [expr [clock clicks -milliseconds] - $TIME_start]
使用 time proc,您可以执行以下操作:
% set tt [time {set x [expr 23 * 34]}]
38 microseconds per iteration
要测量某些代码所花费的时间,您可以使用time
或clock
。
该time
命令将运行其脚本参数并返回脚本所用时间的描述(以毫秒为单位)(加上一些描述性文本,用 删除它是微不足道的lindex
)。如果你真的在做性能分析工作,你可以提供一个可选的 count 参数,使脚本重复运行,但对于一般监控,你可以忽略它。
该clock
命令可让您获得各种时间戳(以及对时间进行格式化、解析和算术运算)。最粗略的是 get with clock seconds
,它返回自 Unix 纪元开始以来的时间量(以秒计算,以民用时间计算;这就是你想要的,除非你正在做一些专门的事情)。如果您需要更多细节,您应该使用clock milliseconds
or clock microseconds
。还有clock clicks
,但通常不定义计数的单位(除非您通过-milliseconds
or-microseconds
选项)。您可以将时间戳变成对您有用的东西。
如果您在 Tcl 8.4(或之前!)上计时,那么您将被限制使用time
, clock seconds
or clock clicks
(甚至该-microseconds
选项不存在;8.4 中没有公开微秒分辨率计时器)。在这种情况下,您应该考虑升级到 8.5,因为它通常更快。越快越好!(如果您使用的是 8.4 之前的版本,请务必升级,因为您在支持方面远远落后。)
要知道函数花费了多长时间,您可以使用time
命令(围绕函数调用)或使用clock clicks
获取函数之前和期间的当前时间。该time
选项很简单,但只能为整个函数计时(并且只会在函数返回时给您一个时间)。clock clicks
可以多次使用,但您需要自己从开始时间中减去当前时间。
如果您真的在寻找某种探查器,请查看 Tcllib 中的探查器包:http: //tcllib.sourceforge.net/doc/profiler.html