Gem Spreadsheet Gem невыносимо медленно работает на Ruby 1.9.2 - PullRequest
3 голосов
/ 29 января 2011

Я создаю синтаксический анализатор Excel для своей группы данных, и у меня возникла проблема с гемом Spreadsheet 0.6.5.1.

В Ruby 1.9.2 использование метода Spreadsheet.open немедленно перебирает до 700-1,3 г памяти и там висит бесконечно даже на небольших (1 лист, 300 строк) книгах. Между тем, в Ruby 1.8.7 Spreadsheet.open работает быстро и безупречно.

Сейчас я делаю большую часть своей работы в irb, так что я могу контролировать среду, которую я использую, только для базовых элементов (гем rubygems / электронных таблиц), но мне нужно в конечном итоге переместить этот анализатор в Rails 3 проекта, поэтому согласиться с 1.8.7 не вариант.

Нет документации по этому вопросу или даже доказательств того, что другие люди сталкивались с этой проблемой. Всякий раз, когда я прерываю вызов Spreadsheet.open, я получаю сообщение об ошибке каждый раз:

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

Я бы хотел, чтобы обезьяна не исправляла это, или не ныряла прямо в камень, чтобы взломать разрешение. Кто-нибудь еще испытывал эту проблему? Или что-нибудь подобное?

Ответы [ 3 ]

2 голосов
/ 09 июля 2012

Настройте свой 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.

С этимиИзменения: экспорт из 25 тыс. строк с использованием гема электронных таблиц увеличился с 10 минут до ~ 2 минут.

0 голосов
/ 24 января 2015

Будет нормально работать, если вы не используете IRB

При тестировании в IRB используйте:

2.1.0: 003> book = Spreadsheet.open 'myfile.xls';ноль

=> ноль

0 голосов
/ 29 января 2011

Две мысли:

...