タグ

ブックマーク / higelog.brassworks.jp (1)

  • Railsのconsoleにて大量のレコードを少ないメモリで処理する - ひげろぐ

    RailsのconsoleでActiveRecordを使って大量のレコードを処理しようとする場合、とりあえずコントローラ内に書くのと同じように以下のように打ってみると思う。 Item.all.each {|item| item.update_price } ところが経験ある人も多いと思うけれども、これをやるとレコード数が1000程度でも大量のメモリをう。 自分の経験を言えば、開発マシンのMacbook Proがスワップを大量発生させてコマ送りのようなレスポンスになった。 それぞれのレコードに対応するオブジェクトがループ終了までガベージコレクションによって破棄されないのでこんな風になる模様。 処理が進むにつれだんだんメモリ消費量が増えていく。 メモリリークのようだけどメモリリークではないんですと。 で、この敵に立ち向かうためにしばらくの間は勤勉さを発揮してある方法を採った。 一度に取得する

    Konboi
    Konboi 2013/01/29
    ActiveRecordのGCについて
  • 1