9

假设我有一个proc,proc 由几个语句和函数调用组成。我怎么知道这个功能到目前为止花了多少时间?

4

4 回答 4

16

一个非常粗略的例子是这样的:

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
于 2011-03-09T10:28:23.037 回答
5

要测量某些代码所花费的时间,您可以使用timeclock

time命令将运行其脚本参数并返回脚本所用时间的描述(以毫秒为单位)(加上一些描述性文本,用 删除它是微不足道的lindex)。如果你真的在做性能分析工作,你可以提供一个可选的 count 参数,使脚本重复运行,但对于一般监控,你可以忽略它。

clock命令可让您获得各种时间戳(以及对时间进行格式化、解析和算术运算)。最粗略的是 get with clock seconds,它返回自 Unix 纪元开始以来的时间量(以秒计算,以民用时间计算;这就是你想要的,除非你正在做一些专门的事情)。如果您需要更多细节,您应该使用clock millisecondsor clock microseconds。还有clock clicks,但通常不定义计数的单位(除非您通过-millisecondsor-microseconds选项)。您可以将时间戳变成对您有用的东西。

如果您在 Tcl 8.4(或之前!)上计时,那么您将被限制使用time, clock secondsor clock clicks(甚至该-microseconds选项不存在;8.4 中没有公开微秒分辨率计时器)。在这种情况下,您应该考虑升级到 8.5,因为它通常更快。越快越好!(如果您使用的是 8.4 之前的版本,请务必升级,因为您在支持方面远远落后。)

于 2011-03-09T10:07:40.503 回答
1

要知道函数花费了多长时间,您可以使用time命令(围绕函数调用)或使用clock clicks获取函数之前和期间的当前时间。该time选项很简单,但只能为整个函数计时(并且只会在函数返回时给您一个时间)。clock clicks可以多次使用,但您需要自己从开始时间中减去当前时间。

于 2011-03-09T07:34:02.473 回答
0

如果您真的在寻找某种探查器,请查看 Tcllib 中的探查器包:http: //tcllib.sourceforge.net/doc/profiler.html

于 2011-03-10T00:38:52.057 回答