2011-01-28 2 views
3

데이터 팀을위한 Excel 파서를 만들고 있는데 스프레드 시트 0.6.5.1 보석과 관련된 문제가 발생했습니다.Ruby 1.9.2에서 스프레드 시트 보석이 천천히 느림

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 호출을 중단 할 때마다, 나는이 오류 유출로 할 때마다 왼쪽 해요 :

보석/스프레드 시트 0.6.5.1/lib 디렉토리/스프레드 시트/worksheet.rb : 181 : '전화'

에서

저는 원숭이가 이것을 패치하지 않거나 해상도를 해킹하기 위해 보석에 직접 뛰어 들어가는 것을 피하고 싶습니다. 다른 누구도이 문제를 경험 했습니까? 아니면 비슷한가?

답변

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 회선 내보내기는 10 분에서 ~ 2 분으로 단축되었습니다.

0

두 가지 생각 :

  • 여전히 officially supports 1.8.7

    레일 3 : 어디에 문제가

    우리는 루비 1.8.7 또는 루비 1.9.2

  • Profile it을 권장 확인합니다 . 그렇다면 무엇을해야하는지 더 잘 이해할 수 있습니다.

+0

감사합니다 전무, 지금 당장이 리드를 사용하여 조사 할 수 있습니다. – ironchamber

0

당신은 IRB

를 사용하지 않는 한 번 그것은

IRB 사용 테스트 할 때이 잘 작동합니다 :

2.1.0 : 003> 책 = Spreadsheet.open 'myfile.xls'을;

프로파일 링 링크 => nil을