Scala:基准测试方法的速度:方法的总运行时间

时间:2012-10-03 05:59:29

标签: scala

我有两种使用Scala查找factorial的方法。我想找出与尾递归方式相比有多慢的非尾递归方式。

// factorial non-tail recursive
def fact1(n: Int): Int =
  if (n==0) 1
  else n*fact(n-1)       

// factorial tail recursive
def fact(n: Int): Int = {
  def loop(acc: Int, n:Int): Int =
    if (n==0) acc
    else loop(acc*n, n-1)
  loop(1, n)
}

// a1 = Time.now
fact1(100)
// a2 = Time.now
// a2-a1

// b1 = Time.now
fact(100)
// b2 = Time.now
// b2-b1

我刚为Time.now编写了Ruby代码。基本上,你如何在Scala中编写Time.now代码?

2 个答案:

答案 0 :(得分:3)

您可以使用提供计算当前时间的方法的java.lang.System类:

  • currentTimeMillis表示当前时间(毫秒)
  • nanoTime表示当前时间(以纳秒为单位)(现建议)。

但是,编写好的微基准测试非常困难,建议依赖于此框架。 Caliper非常好,有一个nice template for projects in scala

答案 1 :(得分:0)

您可以使用Scala包装器方法scala.compat.Platform.currentTime将该调用转发至System.currentTimeMillis