如果我创建一个ruby对象会消耗多少内存?

时间:2014-08-24 09:13:26

标签: ruby-on-rails ruby memory-management

  • 我想知道如果我创建一个ruby对象会占用多少内存。 Ruby有什么方法可以告诉吗?
  • 以下内存消耗是否存在差异?

    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
    

2 个答案:

答案 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)

它可以将结果输出为texttext graphhtml graphcall stackmore。在自述文件中还有一节关于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)