Електронна таблиця Джем нестерпно сповільнює роботу Ruby 1.9.2 - ruby, ruby-on-rail-3, spreadsheet, xls, spreadsheet-gem

Я створюю аналізатор Excel для своєї команди даних, і я стикаюсь з проблемою з переносною таблицею 0.6.5.1.

У Ruby 1.9.2, використання електронної таблиці.Відкритий спосіб негайно приховує до 700м-1.3г пам'яті, і висить на невизначений термін, навіть на маленьких (1 аркуш, 300 рядок) робочих книжках. Тим часом, в Ruby 1.8.7, Spreadsheet.open є швидким і бездоганним.

Зараз я роблю велику частину своєї роботи в IRB, такщо я можу контролювати навколишнє середовище, яким я користуюся лише основи (rubigems / gem), але мені потрібно з часом перемістити цей аналізатор у проект Rails 3, тому залагодження з 1.8.7 не є можливістю.

Немає документації з цього питання або навіть доказів інших людей, які зазнають цієї проблеми. Кожного разу, коли я скасовую виклик Spreadsheet.open, я кожного разу залишив це виправлення помилки:

дорогоцінні камені / електронні таблиці-0.6.5.1 / lib / spreadsheet / worksheet.rb: 181: у "дзвінках"

Я хотів би уникнути того, щоб мавпа це виправляв, або пірнати прямо в перлину, щоб зняти резолюцію. Хто-небудь ще зазнав цієї проблеми? Або щось подібне?

Відповіді:

2 для відповіді № 1

Налаштуйте 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.

За допомогою цих налаштувань лінії з експозицією 25k, що експортуються за допомогою електронної таблиці, переходять від 10 + хвилин до ~ 2 хв для нас.


0 для відповіді № 2

Дві думки:


0 для відповіді № 3

Це буде добре працювати, коли ви не використовуєте IRB

Під час тестування в IRB використовуйте це:

2.1.0: 003> book = Spreadsheet.open "myfile.xls"; нічия

=> ніль


Схожі запитання
Найбільш популярний