【发布时间】:2020-06-11 16:16:01
【问题描述】:
我的问题很简短: 为什么 1.week 比 7.days 需要更多时间?
user system total real
1.week: 10.848330 0.117741 10.966071 ( 11.623818)
7.days: 6.427236 0.059907 6.487143 ( 6.869768)
我看过(来自:github):
def weeks
ActiveSupport::Duration.weeks(self)
end
alias :week :weeks
def days
ActiveSupport::Duration.days(self)
end
alias :day :days
还有这个(来自:github)
SECONDS_PER_MINUTE = 60
SECONDS_PER_HOUR = 3600
SECONDS_PER_DAY = 86400
SECONDS_PER_WEEK = 604800
SECONDS_PER_MONTH = 2629746 # 1/12 of a gregorian year
SECONDS_PER_YEAR = 31556952 # length of a gregorian year (365.2425 days)
PARTS_IN_SECONDS = {
seconds: 1,
minutes: SECONDS_PER_MINUTE,
hours: SECONDS_PER_HOUR,
days: SECONDS_PER_DAY,
weeks: SECONDS_PER_WEEK,
months: SECONDS_PER_MONTH,
years: SECONDS_PER_YEAR
}.freeze
PARTS = [:years, :months, :weeks, :days, :hours, :minutes, :seconds].freeze
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,它会更快!
7 * 24.hours: 4.635190 0.058839 4.694029 ( 5.049936)
感谢您的解释!
【问题讨论】:
-
共享基准时,您应该始终尝试同时准确展示您是如何生成基准的。
-
最可能的解释是您的基准测试方法和/或您的统计方法在某些方面存在缺陷。我始终建议任何考虑编写基准测试的人都应该阅读groups.google.com/forum/#!msg/mechanical-sympathy/m4opvy4xq3U/… 的整个线程,并且只有在您了解该线程中每条消息的每一个字时才开始编写基准测试。参加几门统计学课程通常也没有什么坏处。
标签: ruby-on-rails ruby activesupport