我正在为我的数据团队构建一个excel解析器,我遇到了电子表格0.6.5.1 gem的问题。
在Ruby1.9.2中,使用spreadsheet.open方法可以立即跳转到700m-1.3g的内存,并无限期地挂在那里,即使是在小的(1张300行)工作簿上。同时,在Ruby1.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:调用
我想避免猴子修补这个,或直接跳进宝石黑客出一个决议。还有人经历过这个问题吗?或者类似的?
最佳答案
调整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上应该有类似的效果。
通过这些调整,使用电子表格gem的25k行excel导出对我们来说从10多分钟变成了~2分钟。
关于ruby - Spreadsheet Gem在Ruby 1.9.2上运行缓慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4833563/