3

私は次のクラスを持っています:


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 はそれを収集しないため、何かがそれへの参照を保持しています。オブジェクトを他のクラスでラップし、そのクラスにシングルトンを含めることで回避策を作成しました。それでも、ここで何が起こっているのか理解したい。

4

1 に答える 1

0

これは、最近のgithubの問題に関するレールのコメントで言及されていました。そこで検索できます。簡単に言えば、クラス変数がリクエスト間で固執しないため、これが行われます。

于 2011-06-16T17:50:12.537 に答える