假设我有 proc ,并且proc包含多个语句和函数调用。我怎么知道这个函数到目前为止花了多少时间?
答案 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)
要衡量某些代码所用的时间,您可以使用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之前的版本,那么肯定会升级,因为您在支持方面非常落后。)
答案 2 :(得分:1)
要知道函数花了多长时间,您可以使用time
命令(包含函数调用)或使用clock clicks
来获取函数之前和之后的当前时间。 time
选项很简单,但只能为整个函数计时(并且只会在函数返回时给你一个时间)。使用clock clicks
可以多次完成,但您需要自己从开始时间中减去当前时间。
答案 3 :(得分:0)
如果您真的想找某种分析器,请查看Tcllib中的分析器包: http://tcllib.sourceforge.net/doc/profiler.html