ruby:传递活动记录对象的数字id更好,还是传递对象本身更好?

ruby:传递活动记录对象的数字id更好,还是传递对象本身更好?,ruby,activerecord,Ruby,Activerecord,我的应用程序长期遭受内存泄漏的困扰。它的工作主要是长期运行的sidekiq工作 今天我要添加一个方法,我想知道什么是最好的方法,考虑到内存效率是#1优先级: # option 1 def func1(product_id) product = Product.find(product_id) # do something with product end # option 2 def func1(product) # do something with product end 哪

我的应用程序长期遭受内存泄漏的困扰。它的工作主要是长期运行的sidekiq工作

今天我要添加一个方法,我想知道什么是最好的方法,考虑到内存效率是#1优先级:

# option 1
def func1(product_id)
  product = Product.find(product_id)
  # do something with product
end

# option 2
def func1(product)
  # do something with product
end
哪一个最好?选项1只传递整数,该方法执行活动记录find()调用来处理对象

选项2获取对象本身,因此方法不必 查找()对象


顺便说一句,该方法每天运行数百万次。

我很确定,即使是第二种方法也会在引擎盖下调用ls
find
。另请参见序列化程序部分。另见。我个人认为作业中的
find
是不必要的,所以我更喜欢使用序列化程序系统,或者只是通过其他方式序列化参数来散列您自己。这也处理了一种边缘情况,即在作业开始之前删除记录。您必须在这件事上运行数字:基准测试,然后只优化瓶子脖子。没有什么比实数更好。如果使用Sidekiq,总是传递值,而不是整个对象。选项2意味着您已经在调用方一侧拥有了对象。为什么要再次从数据库中获取记录?当然,除非您正在实现Sidekiq的
perform
方法——由于反序列化,该方法应该使用简单的标识符。