我有以下课程:
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来解决了这个问题。不过,我想了解,这里发生了什么。
答案 0 :(得分:0)
这是在github问题的rails评论中提到的,我想不久前,你可以在那里搜索它。简而言之,这样做是因为类变量不会在请求之间留下来。