3

データ チームのために Excel パーサーを作成していますが、Spreadsheet 0.6.5.1 gem で問題が発生しました。

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 呼び出しを中止するたびに、毎回このエラーが発生します。

gems/spreadsheet-0.6.5.1/lib/spreadsheet/worksheet.rb:181:in 'call'

サルがこれにパッチを当てたり、宝石に直接飛び込んで解決策をハックしたりすることは避けたいと思います。他の誰かがこの問題を経験しましたか? それとも似たようなもの?

4

3 に答える 3

2

GC を微調整して、問題が解決するかどうかを確認します。

リーの場合:

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 でも同様のものが動作するはずです。

これらの調整により、スプレッドシート gem を使用した 25,000 行の Excel エクスポートが 10 分以上から 2 分に短縮されました。

于 2012-07-09T13:22:08.730 に答える
0

2つの考え:

于 2011-01-28T22:17:06.513 に答える