Эта проблема, кажется, решена в последней версии EPPlus (4.0.x)
EDIT: Добавление ссылок, на страницы, которые указывают на улучшенное управление памятью в EPPlus 4.0.4.
https://epplus.codeplex.com/releases/view/118053#ReviewsAnchor Отзывы пользователей о улучшенной производительности памяти в 4.x версии по сравнению с версией 3.x.
https://epplus.codeplex.com/wikipage?title=Roadmap Версия 4.0: Новый cellstore для улучшения вставки, удаления производительность и потребление памяти
Эта ссылка объясняет, как обеспечить загрузку ОГРОМНОЕ количество ячеек оптимизировано.
http://epplus.codeplex.com/wikipage?title=FAQ&referringTitle=Documentation См. Раздел «У меня есть много данных, которые я хочу загрузить. Что я должен думать, чтобы получить лучшую производительность?»
Кроме того, я лично протестировал EPPlus 4.0.4 сегодня, выписав 1,5 миллиона записей за один раз из 5 числовых строк и 1 строки DateTime, а рабочий набор пиковой памяти, указанный диспетчером задач Windows, был всего 711 MB. Непайковый пул, показанный диспетчером задач Windows, составлял всего 75 тыс. Или около того! Конечно, я не уверен, отражают ли эти цифры полное влияние объема памяти, но они являются показательными. Выходной файл Excel был около 59 МБ (возможно, мои столбцы были больше, чем данные примера, упомянутые вами в вашем исходном сообщении.)
ПРИМЕЧАНИЕ. Я получил «OutOfMemoryException», когда пытался записать 4,5 миллиона записей из 7 столбцов за один раз!
Является ли мой тест достаточно строгим? Возможно, нет ... Хорошо работает для меня.
Однако один обходной путь я мог думать, чтобы преодолеть большие требования к памяти в более ранних версиях, чтобы разбить и сохранить файл XLSX для каждого 100K записей. После сохранения начните использовать новый файл (с соответствующим приращением счетчика имен файлов) для следующих 100K записей.
В конце вашей операции у вас будет 10 файлов из 100 тыс. Записей, например, всего 1 млн записей.
Может показаться немного взломанным, но эй, возможно, лучше, чем переписать свою базу кода, чтобы использовать какую-либо другую библиотеку (бесплатную или коммерческую).
Нет ответа через неделю? –
Это очень распространенная проблема. EPPLus - отличная библиотека, но когда дело доходит до написания больших файлов, потребление памяти - огромная проблема :( – SharpCoder
Знаете ли вы хорошую альтернативу для .Net? –