【发布时间】:2011-07-11 16:31:48
【问题描述】:
假设我有一个 proc,该 proc 由几个语句和函数调用组成。我怎么知道这个函数到目前为止花了多少时间?
【问题讨论】:
标签: time timestamp tcl proc-object
假设我有一个 proc,该 proc 由几个语句和函数调用组成。我怎么知道这个函数到目前为止花了多少时间?
【问题讨论】:
标签: time timestamp tcl proc-object
一个非常粗略的例子是这样的:
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 命令可让您获得各种时间戳(以及对时间进行格式化、解析和算术运算)。最粗略的是clock seconds,它返回自 Unix 纪元开始以来的时间量(以秒计算,以民用时间计算;这就是你想要的,除非你正在做一些专门的事情)。如果您需要更多详细信息,您应该使用clock milliseconds 或clock microseconds。还有clock clicks,但通常不会定义计数的单位(除非您通过-milliseconds 或-microseconds 选项)。您可以将时间戳变成对您有用的东西。
如果您在 Tcl 8.4(或之前!)上计时,那么您将受限于使用 time、clock seconds 或 clock clicks(甚至不存在 -microseconds 选项;没有微秒 - 8.4 中公开的分辨率计时器)。在这种情况下,您应该考虑升级到 8.5,因为它通常更快。越快越好! (如果您使用的是 8.4 之前的版本,请务必升级,因为您在支持方面远远落后。)
【讨论】:
要知道函数花费了多长时间,您可以使用time 命令(围绕函数调用)或使用clock clicks 来获取函数之前和之后的当前时间。 time 选项很简单,但只能为整个函数计时(并且只会在函数返回时给你一个时间)。使用clock clicks 可以多次使用,但您需要自己从开始时间中减去当前时间。
【讨论】:
clock clicks -milliseconds,因为它会以已知单位返回时间。
如果您真的在寻找某种探查器,请查看 Tcllib 中的探查器包: http://tcllib.sourceforge.net/doc/profiler.html
【讨论】: