Ruby on rails Ruby ActiveSupport 1周VS 7天
我的问题很简短: 为什么一周的时间比七天多Ruby on rails Ruby ActiveSupport 1周VS 7天,ruby-on-rails,ruby,activesupport,Ruby On Rails,Ruby,Activesupport,我的问题很简短: 为什么一周的时间比七天多 user system total real 1.week: 10.848330 0.117741 10.966071 ( 11.623818) 7.days: 6.427236 0.059907 6.487143 ( 6.869768) 我(从:)看过它: 这个(来自:) 但是,对我来说,这只是一个乘法运算,不需要更多的时间! 而且,更糟糕的是,如果我这样做的话,它会更快 7 * 2
user system total real
1.week: 10.848330 0.117741 10.966071 ( 11.623818)
7.days: 6.427236 0.059907 6.487143 ( 6.869768)
我(从:)看过它:
这个(来自:)
但是,对我来说,这只是一个乘法运算,不需要更多的时间!
而且,更糟糕的是,如果我这样做的话,它会更快
7 * 24.hours: 4.635190 0.058839 4.694029 ( 5.049936)
谢谢你的解释 我不确定您在这里测试的是什么(因为您没有显示实际的基准脚本),但由于这两个代码路径非常相似,它们实际上也显示出非常相似的性能特征 通过使用(Ruby 2.7.1和ActiveSupport 6.0.3),我可以确认它们的速度大致相同:
require 'benchmark/ips'
require 'active_support/core_ext'
Benchmark.ips do |x|
x.report("1.week") { 1.week }
x.report("7.days") { 7.days }
x.compare!
end
在我的机器上,我得到以下结果:
Warming up --------------------------------------
1.week 195.777k i/100ms
7.days 197.404k i/100ms
Calculating -------------------------------------
1.week 1.915M (± 2.5%) i/s - 9.593M in 5.011463s
7.days 1.855M (± 5.1%) i/s - 9.278M in 5.015019s
Comparison:
1.week: 1915476.4 i/s
7.days: 1855425.8 i/s - same-ish: difference falls within error
是的,从问题中可以看出,测试只运行了一次,因此没有考虑预热时间。在共享基准测试时,您应该始终尝试准确显示您是如何生成它的。最可能的解释是,您的基准测试方法和/或统计方法在某些方面存在缺陷。我总是建议任何想写基准测试的人都应该阅读整个线程,并且只有在你理解了线程中每条消息的每个单词后才开始写基准测试。上两节统计学课通常也没什么坏处。
def weeks(value) #:nodoc:
new(value * SECONDS_PER_WEEK, weeks: value)
end
def days(value) #:nodoc:
new(value * SECONDS_PER_DAY, days: value)
end
7 * 24.hours: 4.635190 0.058839 4.694029 ( 5.049936)
require 'benchmark/ips'
require 'active_support/core_ext'
Benchmark.ips do |x|
x.report("1.week") { 1.week }
x.report("7.days") { 7.days }
x.compare!
end
Warming up --------------------------------------
1.week 195.777k i/100ms
7.days 197.404k i/100ms
Calculating -------------------------------------
1.week 1.915M (± 2.5%) i/s - 9.593M in 5.011463s
7.days 1.855M (± 5.1%) i/s - 9.278M in 5.015019s
Comparison:
1.week: 1915476.4 i/s
7.days: 1855425.8 i/s - same-ish: difference falls within error