有的时候做批量操作的时候,比如:
Article.published.each do |ar|
do_sth(ar)
end
发现执行过程中,内存不断消耗掉,按照我的想法,each 出来的应该是一个迭代器,每次迭代中间的临时变量应该会被收集掉,但是结果不是。我是用 pry 来跑的,不知道是否会有影响。这样的问题就是,如果 article 表比较大,或者中间展开消耗了很多内存(比如 article 又联系到了一堆对象),最后容易跑爆掉。
请问大家有谁知道具体的原理,以及如何处理这种状况?谢谢。