大規模データ on Ruby

最近はRubyで趣味プログラムを書いている(今まではC++)。今までスクリプト言語を殆ど使ってこなかったので、「書きやすいけど、少し遅くて少しメモリを食う(倍くらい)」位に考えていたが、使ってみると「少し」どころではないようだ。
具体的には

  • Cで150MB程度のデータをRubyで読み込むと、1.5G以上になってしまう(なんと10倍!)
  • 上記のデータをcsvファイルから読み込むのに5分以上かかる!
  • 上記のデータを読み込んでいくと、(おそらくGCによって)速度がみるみる落ちていく!

といった具合。
現在はcsvファイルの読み込みの代わりにMarshalでシリアライズしたデータを読み込んでいるが、根本的な対策になっていないので完全に焼け石に水だ。
つい先ほど、「プログラム実行中はこのデータは不変なのだから、GCに管理されるオブジェクトではなく、コード部分に埋め込めば良いのでは?」と思ってデータ配列へのアクセスの代わりにcase文で使用コードごと展開させるスクリプトを書いてみたところ、出来上がったコードは550MB以上だった。。よく考えればデータだけで150MBなのだから当たり前な話だけれども。
...
結局解決策は見つかっておらず、「コード修正->実行」のイテレーションが遅すぎて困っている、というだけのオチのない話。