2011-01-28 2 views
3

データチーム用のExcelパーサを作成していますが、Spreadsheet 0.6.5.1 gemで問題が発生しました。Ruby 1.9.2でひじょうに遅い宝石

Ruby 1.9.2では、Spreadsheet.openメソッドを使用すると、すぐにメモリが700m〜1.3gまでホップされ、小規模(1枚、300行)のブックにも無期限にハングアップします。一方、Ruby 1.8.7では、Spreadsheet.openはすばらしく完璧です。

今はirbで多くの作業をしていますので、私は基本(Rubygems/spreadsheet gem)だけで使用している環境を制御できますが、最終的にはこのパーサをRails 3プロジェクトであるため、1.8.7で解決することはできません。

この問題に関するドキュメントや、この問題が発生している他の人々の証拠はありません。私はSpreadsheet.open呼び出しを中止するときはいつでも、私はこのエラー流出とするたびに左にしています:

宝石/スプレッドシート-0.6.5.1/libに/スプレッドシート/ worksheet.rb:181: 'コール'

私はこれにパッチを当てるのを避けたいですし、解像度をハックアウトするために宝石に直接潜ってください。他の誰かがこの問題を経験しましたか?それとも似たようなもの?

答えて

2

微調整あなたはGC、それが何か修正かどうかを確認:REEについて

を:

export RUBY_HEAP_MIN_SLOTS=1000000 
export RUBY_HEAP_SLOTS_INCREMENT=1000000 
export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1 
export RUBY_GC_MALLOC_LIMIT=1000000000 
export RUBY_HEAP_FREE_MIN=500000 

を同様の何かが、1.9.xでYMMVを動作するはずです。

これらの調整では、スプレッドシートの宝石を使用して25k本のラインがExcelからエクスポートされ、10分から2分になりました。

0

つの思考:

  • Railsの3まだofficially supports 1.8.7

    私たちは、問題がどこにあるか見るためのRuby 1.8.7やRuby 1.9.2

  • Profile itをお勧めします。それからあなたは何をすべきかのより良い感覚を持っているかもしれません。

+0

プロファイリングリンクをありがとうございます。私はすぐにそこでリードを使用して調査します。 – ironchamber

0

IRB使用して、このテストをするときは、IRB

を使用していない一度は正常に動作します:

2.1.0:003>ブック= Spreadsheet.open 'myfile.xlsを'; nil

=> nil

関連する問題