我正在为我的数据团队构建一个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'中
我想避免猴子修补这个,或直接潜入宝石以破解决议。还有其他人遇到过这个问题吗?或类似的东西?
答案 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)
两个想法:
Rails 3仍然是officially supports 1.8.7:
我们建议使用Ruby 1.8.7或Ruby 1.9.2
Profile it了解问题所在。然后你可能会更好地了解该怎么做。
答案 2 :(得分:0)
一旦您不使用IRB,它将正常工作
在IRB中进行测试时使用:
2.1.0:003> book = Spreadsheet.open'myfile.xls';零
=>零