我有以下类(class):
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 issues的rails评论里提到的,你可以去那里搜一下。长话短说,它这样做是因为类变量不会在请求之间停留。
关于ruby-on-rails-3 - 为什么 ActionController::Metal 会泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5890952/