- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如何使 ActiveSupport::TimeWithZone
更快地构建或延迟?
我一直在分析我的 Rails 应用程序,我发现三分之一的 CPU 时间花在构建这些 TimeWithZone
对象上。我对此束手无策。看似简单的时间对象怎么可能构造起来如此昂贵?
这是每个请求运行无数次的代码:
def deserialize_from_cache(json)
attributes = ActiveSupport::JSON.decode(json)
attributes.keys.to_a.each do |k|
v = attributes[k]
if v.is_a? Array and v.length == 2 and v[0] == 'Time'
attributes[k] = Time.at(v[1]).in_time_zone # This is the expensive code
end
end
self.allocate.init_with('attributes' => attributes)
end
我对普通的旧 Time
对象构造进行了基准测试,发现它比 TimeWithZone
构造快一个数量级:
puts Benchmark.measure { 200000.times { Time.at(1330367843) } }
0.070000 0.000000 0.070000 ( 0.068956)
puts Benchmark.measure { 200000.times { Time.at(1330367843).in_time_zone } }
0.720000 0.000000 0.720000 ( 0.715802)
我可以做些什么来以编程方式将所有模型的日期时间属性替换为惰性 TimeWithZone
对象,这些对象是普通的旧(且便宜)Time
对象,直到它们在什么时候使用它们变成了 TimeWithZone
对象?这远远超出了我的 Ruby 能力。
最佳答案
这个问题让我印象深刻的是,您关注的代码是从 deserialize_from_cache(json)
中调用的。为什么 that 被如此频繁地调用?您是否可以进一步查看调用链,看看是否可以减少 json 到时间的解析量?
关于ruby - 在 Rails 中使 TimeWithZone 对象变得惰性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037865/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!