Relation#update(id, attributes)
文档提到“无论对象是否成功保存到数据库,都会返回结果对象。”,而没有进行实例化、回调或验证的状态Relation#update_all(updates, conditions = nil, options = {})
(直接数据库查询)。
运行一个简单的性能测试并替换Relation#update
为Relation#update_all
,看起来内存消耗增加了。
有什么解释吗?
摘抄:
#Before
MyModel.update(my_hash['id'], special_attrs)
#After (more memory consumed)
MyModel.where(:id => my_hash['id']).update_all(special_attrs)
#Update-2 (slightly more memory consumed than with update(id, attrs)
MyModel.update_all(special_attrs, {:id => my_hash['id']})
- Windows XP(是的 - 我知道)
- JRuby 1.6.8 (1.9)
- 导轨 3.2.8
更新- 一些用于比较的基本数字:对于触发的大约 700 个更新语句,差异约为 0.6MB(每条语句 0.8kB)
更新 2 - 根据@philip-hallstrom 的建议删除了 AREL 链接。内存占用略有减少,但仍MyModel.update_all(attrs, conditions)
比MyModel.update(id, attrs)
.