我正在寻找一些帮助来测量使用while
循环时函数调用的时间 - 也就是说,当函数抛出时,时钟应该停止。我在邮件列表上找到了以下计时器:http://lists.gnu.org/archive/html/help-gnu-emacs/2008-06/msg00087.html
(defmacro measure-time (&rest body)
"Measure the time it takes to evaluate BODY."
`(let ((time (current-time)))
,@body
(message "%.06f" (float-time (time-since time)))))
它的使用方式如下:
(measure-time
(dotimes (i 100000)
(1+ 1)))
如何使用带有while
循环的计时器宏的示例将非常感激。我正在寻找从while
循环开始到结束时done
被抛出的总时间。
(defun test ()
(measure-time)
(catch 'done
(while t
[*** do a bunch of stuff]
(when (condition-satisfied-p)
[*** STOP THE CLOCK AND PRINT TOTAL DURATION ***]
(throw 'done nil) ))))
答案 0 :(得分:4)
正如您引用的示例所示。你真的将(measure-time ... )
包裹在你正在计时的东西周围。在您的情况下,catch
表达式的全部内容。
你没试过吗?
答案 1 :(得分:1)
顺便说一句,这个宏在 Emacs 中被称为 benchmark-elapse
,但它不会自动加载,所以你需要在使用它之前 (require 'benchmark)
。