【发布时间】:2012-10-28 20:27:21
【问题描述】:
我有一个名为“Search”的简单模型,用于存储搜索。它捕获 URL 参数并将它们存储在属性 :search_criteria 中,该属性被序列化为哈希:
serialize :search_criteria, Hash
这一切都很完美,但它的表现很糟糕。仅针对 5 个对象,以下语句大约需要 0.2 秒。
start = Time.now
SavedSearch.all.map(&:search_criteria)
puts Time.now - start
但是,如果我删除了序列化行(这样 search_criteria 返回一个字符串),则语句只需要 0.002 秒。这是反序列化哈希的 2 个数量级的差异!
这里发生了什么?
Rails.version = 3.2.8 Ruby 1.9.3p194(2012-04-20 修订版 35410)[x86_64-linux]
【问题讨论】:
-
和
HashWithIndifferentAccess一样吗? -
不重启控制台多次重复测试是否一样?
-
是的。每次运行都完全相同:比不调用序列化慢 2 个数量级。
-
有人能重现这个吗?
-
我在多个系统上又试了一次,到处都是一样的。谁能证实这一点?
标签: ruby-on-rails ruby serialization hash