TCL - 如何知道函数运行了多长时间?

时间:2011-03-09 07:30:42

标签: time timestamp tcl proc-object

假设我有 proc ,并且proc包含多个语句和函数调用。我怎么知道这个函数到目前为止花了多少时间?

4 个答案:

答案 0 :(得分:12)

一个非常粗略的例子是:

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

答案 1 :(得分:3)

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

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

clock命令可以让您获得各种时间戳(以及进行格式化,解析和算术运算)。最粗糙的是clock seconds,它返回自Unix纪元开始以来的时间量(以民用时间计算的秒数;这是你想要的,除非你做一些专门的事情)。如果您需要更多详细信息,请使用clock millisecondsclock microseconds。还有clock clicks,但通常不会定义计入的单位(除非您通过-milliseconds-microseconds选项)。您可以将时间戳转换为对您有用的内容。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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