Emacs - 在Emacs lisp中执行函数调用的时间

时间:2014-05-13 03:24:51

标签: emacs elisp

我正在寻找一些帮助来测量使用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) ))))

2 个答案:

答案 0 :(得分:4)

正如您引用的示例所示。你真的将(measure-time ... )包裹在你正在计时的东西周围。在您的情况下,catch表达式的全部内容。

你没试过吗?

答案 1 :(得分:1)

顺便说一句,这个宏在 Emacs 中被称为 benchmark-elapse,但它不会自动加载,所以你需要在使用它之前 (require 'benchmark)