我有以下类:
class Myclass < ActionController::Metal
def myaction
huge_object.do_something
# etc.
end
private
def huge_object
@obj ||= begin
# allocate and initialize a ~10MB object
end
end
end
我惊奇地发现,即使在生产环境中,每次调用myaction时,都会分配对象。此外,由于GC没有收集它,因此有些东西持有对它的引用。我通过在其他类中包装对象并在该类中包含Singleton来解决这个问题。尽管如此,我还是想知道这里发生了什么。
这是在github问题的rails评论中提到的,我想不久之前,你可以在那里搜索它。长话短说,它这样做是因为类变量不会在请求之间停留。