gpt4 book ai didi

ruby-on-rails - Time.zone.at 比 Time.at 慢 10 倍

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:48 27 4
gpt4 key购买 nike

我有大量数据,在 1 个请求期间我实例化了 Time 30_000 次。我检查了性能,发现从 db 查询数据花费了 0.020 秒,并用

实例化了 Time 对象
Time.zone.at(seconds_with_fraction)

用了 0.5 秒。

我对 Time.zone.atTime.at 之间的差异进行了基准测试,并得到:

puts Benchmark.measure { 30_000.times { Time.zone.at(1439135459.6) } }
0.510000 0.010000 0.520000 ( 0.519298)

puts Benchmark.measure { 30_000.times { Time.at(1439135459.6) } }
0.060000 0.000000 0.060000 ( 0.068141)

有什么方法可以减少需要 Time 类实例化 UTC 时区对象的时间吗?

最佳答案

花费这么长时间的不仅仅是时区更改。如果您只使用 Time.now,您将不会看到同样的减速:

irb(main):022:0> puts Benchmark.measure { 30_000.times { Time.now } }
0.030000 0.000000 0.030000 ( 0.028038)
=> nil
irb(main):023:0> puts Benchmark.measure { 30_000.times { Time.now.utc } }
0.040000 0.010000 0.050000 ( 0.076438)
=> nil

解决您的问题的最佳方法是使用不同于给出自 unix 纪元以来的秒数的方法来定义您的 Time。但是,如果您没有办法解决这个问题,那么一个更快的解决方案是像这样使用 DateTime:

irb(main):038:0*  puts Benchmark.measure { 30_000.times { DateTime.strptime("1439135459.6",'%s') } }
0.170000 0.030000 0.200000 ( 0.217340)
=> nil

关于ruby-on-rails - Time.zone.at 比 Time.at 慢 10 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com