TCL - как узнать, сколько времени сработала функция? - PullRequest
6 голосов
/ 09 марта 2011

Скажем, у меня есть proc , и этот процесс состоит из нескольких операторов и вызовов функций. Как я могу узнать, сколько времени заняла функция?

Ответы [ 4 ]

12 голосов
/ 09 марта 2011

очень грубый пример будет что-то вроде:

set TIME_start [clock clicks -milliseconds]
...do something...
set TIME_taken [expr [clock clicks -milliseconds] - $TIME_start]

Используя временной процесс, вы можете сделать следующее:

% set tt [time {set x [expr 23 * 34]}]
38 microseconds per iteration
3 голосов
/ 09 марта 2011

Чтобы измерить время, которое занял какой-то код, вы либо используете 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, определенно обновитесь, так как вы сильно отстали в плане поддержки.)

1 голос
/ 09 марта 2011

Чтобы узнать, сколько времени заняла функция, вы можете либо использовать команду time (обернутую вокруг вызова функции), либо использовать clock clicks, чтобы получить текущее время до, а затем во время функции. Опция time проста, но может рассчитывать только время всей функции (и даст вам только время, когда функция вернется). Использование clock clicks может быть выполнено несколько раз, но вам нужно будет вычесть текущее время из времени запуска самостоятельно.

0 голосов
/ 10 марта 2011

Если вы действительно ищете какой-то профилировщик, взгляните на пакет профилировщика в Tcllib: http://tcllib.sourceforge.net/doc/profiler.html

...