电子表格Gem在Ruby 1.9.2上难以忍受

时间:2011-01-28 22:10:48

标签: ruby ruby-on-rails-3 spreadsheet xls spreadsheet-gem

我正在为我的数据团队构建一个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:在'call'中

我想避免猴子修补这个,或直接潜入宝石以破解决议。还有其他人遇到过这个问题吗?或类似的东西?

3 个答案:

答案 0 :(得分: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分钟。

答案 1 :(得分:0)

两个想法:

答案 2 :(得分:0)

一旦您不使用IRB,它将正常工作

在IRB中进行测试时使用:

2.1.0:003> book = Spreadsheet.open'myfile.xls';零

=>零