为什么这两种方法给我两个不同的时间?
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
这两种方法都计算 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