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

时间:2018-01-20 21:31:45

标签: ruby codeblocks proc

两种方法都计算ruby调用和运行代码块所需的时间。我没有看到为什么这两种方法应该返回不同结果的任何原因。

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)

2 个答案:

答案 0 :(得分:2)

您始终无法获得相同的输出,因为计算机上运行的其他进程可能会减少或更多地使用计算机的CPU,并且可能会发生一些缓存和解释程序优化。对于这种简单的方法,您只需一次通过就无法对它们进行可靠的计时。如果你想对这样的东西进行基准测试,最好是数千次或数百次,然后取平均值。这将产生更一致的结果,因为"噪音"外部因素被取消了。

答案 1 :(得分:1)

你不应该期望它们完全一样。 Ruby流程之外总会有一些会影响性能的事情。您应该考虑误差幅度,例如0.1%

<?php
$imagesDir = __DIR__ . '/4611416038/';
$images    = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
$randomImage = $images[array_rand($images)];

//Output
$data = file_get_contents($randomImage);
ob_clean();
header("Content-Type: image/jpeg"); //Make browser recorgnize it as image
echo $data;
?>