为什么这两种方法给我两个不同的时间?

Why do these two methods give me two different times?

这两种方法都计算 ruby 调用和 运行 一个代码块所花费的时间。我看不出这两种方法应该 return 不同结果的任何原因。

methodone 给我:1.000135157

methodtwo 给我:1.000108267

我是菜鸟,我这样做对吗?请告诉我。

def methodone(a)
  start = Time.now 
  a.call
  result = Time.now - start
end

def methodtwo(a)
  start_time = Time.now
  a.call
  end_time = Time.now
  result = end_time - start_time
end 

a = Proc.new do {}
end

p methodone(a)
p methodtwo(a)

您不会总是得到相同的输出,因为您计算机上的 CPU 可能或多或少地被其他进程 运行 使用,并且一些缓存和解释器优化可以发生。对于这种简单的方法,您无法通过一次传递来可靠地计时。如果您想对类似的东西进行基准测试,最好对其进行数千或数百万次调整,然后取平均值。这将产生更一致的结果,因为 "noise" 外部因素被抵消了。

您不应该期望它们完全相同。在 Ruby 过程之外总会发生一些会影响性能的事情。你应该考虑误差幅度,比如 0.1%

def time(&block)
  t = Time.now.to_f
  yield 
  t2 = Time.now.to_f 
  puts t2 - t 
end

50.times do 
  time do 
    Proc.new { }
  end
end