この問題は、EPPlus の最新バージョン (4.0.x) で解決されているようです。
編集: EPPlus 4.0.4 で改善されたメモリ管理を示すページへの参照リンクを追加します。
https://epplus.codeplex.com/releases/view/118053#ReviewsAnchor
3.x バージョンと比較して 4.x バージョンで改善されたメモリ パフォーマンスに関するユーザーのレビュー。
https://epplus.codeplex.com/wikipage?title=ロードマップ バージョン 4.0: 挿入、削除のパフォーマンスとメモリ消費
を改善するための新しい cellstore
このリンクは、膨大な数のセルのロードが最適化されるようにする方法を説明しています。
http://epplus.codeplex.com/wikipage?title=FAQ&referringTitle=Documentation
「ロードしたいデータがたくさんあります。最高のパフォーマンスを得るにはどうすればよいですか?」セクションを参照してください。
また、私は今日 EPPlus 4.0.4 を個人的にテストしました。5 つの数値行と 1 つの DateTime 行の 150 万レコードを一度に書き出すことで、Windows タスク マネージャーによって報告されたピーク メモリ ワーキング セットはわずか 711 MB でした。Windows タスク マネージャーで表示される非ページ プールは、わずか 75K 程度でした。もちろん、これらの数値がメモリ フットプリントの影響を完全に捉えているかどうかはわかりませんが、これらは目安です。出力された Excel ファイルは約 59 MB でした (元の投稿で言及されたサンプル データよりも多くの列があった可能性があります)。
注: 一度に 7 列の 450 万件のレコードを書き込もうとしたときに、"OutOfMemoryException" が発生しました。
私のテストは十分に厳密ですか?多分そうではありません...私にとってはうまくいきます。
ただし、以前のバージョンでの大量のメモリ要件を克服するために考えられる 1 つの回避策は、100K レコードごとに xlsx ファイルを分割して保存することです。保存後、次の 100K レコードに対して新しいファイル (適切なファイル名カウンターの増分を使用) の使用を開始します。
操作の最後には、たとえば合計 100 万レコードの 100K レコードのファイルが 10 個あることになります。
ちょっとしたハックのように思えるかもしれませんが、他のライブラリ (無料または商用) を使用するようにコード ベースを書き直すよりはましかもしれません。