以下内存消耗是否存在差异?
users = User.where("created_at > ?", 2.months.ago) # select all fields
users = User.select(:user_name).where("created_at > ?", 2.months.ago) # just select one field
答案 0 :(得分:5)
您可以使用ruby-prof
,这是一个精彩的ruby探查器,可以告诉您代码正在执行的所有操作,包括内存分配。用法非常简单:
require 'ruby-prof'
# Profile the code
result = RubyProf.profile do
...
[code to profile]
...
end
# Print a flat profile to text
printer = RubyProf::FlatPrinter.new(result)
printer.print(STDOUT)
它可以将结果输出为text,text graph,html graph,call stack和more。在自述文件中还有一节关于profiling rails应用程序。安装是即时的,所以试试看:
gem install ruby-prof
答案 1 :(得分:3)
首先,没有简单的方法来衡量对象消耗的内存量。如果它是Rails应用程序,您可以使用此Unix Script进行检查。还有一个很棒的blog post可以帮助你解决这个问题。
在你的第二个问题中。第二个查询可能会消耗更少的内存,因为ActiveRecord没有处理所有字段来构建AR对象。最终,使用.pluck进行第二次查询会更好。
users = User.where("created_at > ?", 2.months.ago).pluck(:user_name)