代码之家  ›  专栏  ›  技术社区  ›  Peter Tillemans

如何在Clojure中对函数进行基准测试?

  •  40
  • Peter Tillemans  · 技术社区  · 14 年前

    time宏返回求值函数的值,这使得内联使用它非常好。但是,我想在特定情况下自动测量运行时。

    有没有一个函数可以返回某个库中经过的时间来帮助进行基准测试?

    3 回复  |  直到 14 年前
        1
  •  28
  •   Community Keith    4 年前

    你可能想看看雨果邓肯的基准库Clojure-- Criterium .

    自述文件:

    标准度量表达式的计算时间。它旨在解决基准测试的一些缺陷,尤其是JVM上的基准测试。

    这包括:

    • 多重评价的统计处理
    • 在测试前清除gc,以便在测试前将计时与gc状态隔离
    • 测试后的最终强制GC估计清理对计时结果的影响
        2
  •  32
  •   G__    14 年前

    时间 .

    user=> (def x (with-out-str (time (+ 2 2))))
    #'user/x
    user=> x
    "\"Elapsed time: 0.119 msecs\"\n"
    

    如果希望对格式有更多的控制,那么可以创建自己的版本 时间 使用Java的系统时间方法

    user => (macroexpand '(time (+ 2 2)))
    (let* [start__4197__auto__ (. java.lang.System (clojure.core/nanoTime))  
           ret__4198__auto__ (+ 2 2)] 
         (clojure.core/prn (clojure.core/str "Elapsed time: " (clojure.core//     
              (clojure.core/double 
                   (clojure.core/- (. java.lang.System (clojure.core/nanoTime)) 
                                    start__4197__auto__)) 1000000.0) " msecs"))
     ret__4198__auto__)
    

    把这个基本结构换成 prn公司 不管你喜欢什么报告机制。

        3
  •  0
  •   circlespainter    9 年前

    如果您为您的函数生成一个Java绑定(并使用Clojure-Maven插件重新配置),那么您甚至可以使用JMH( http://openjdk.java.net/projects/code-tools/jmh/ https://github.com/circlespainter/pulsar-auto-instrument-bench