nakamura-akifumi/enju_trunk — pull request #37 by arika (2013-08-26 02:32:58+00:00)
Title: 書誌リストのExcel出力時のメモリ使用量を削減する

以下の二点の改修を行った。

1. Excel出力のための中間データをファイルに保存する

AxlsxによるExcel出力はすべてオンメモリで処理されるため、出力書誌数に応じてメモリ使用量が増えてしまう。

これを回避するため、Excel出力過程で生成される中間データを一時ファイルに出力する子クラス群を作成した。これによりメモリ使用量削減と、書誌数増によるメモリ使用量増の傾向をおさえることができる。

ただし、これら子クラス群で対応できるのは一時ファイルへの中間データは追加のみであり、もともとのAxslxで提供される編集的な機能を使うことはできない。

2. Manifestation.generate_manifestation_listの全件走査を回避する

Manifestation.generate_manifestation_listにおけるExcel出力をバックグラウンド処理にするかどうかの判定では対象書誌の全件走査をしている。これは 61449629ca87cc4f0620caecb6ee1416192aeda1(#4889)で変更・導入されたもので、結果的にバックグラウンド処理とする場合であっても全書誌のロード(および多数回のDBアクセス)が行われメモリの多量消費を避けられない。

これを回避しメモリ使用量を削減するため、同変更により行われるようになった、Rubyコードによる集計をActiveRecrod内で実行するようにした。