Объединение нескольких xlsx через ClosedXML потребляет много памяти

Есть 4 xmlsx-файла. Два мелких, с десяток строк, и 2 побольше, строк ~1800, да примерно по 40 колонок в каждом. В файлах есть с пяток формул, в которых суммируется с десяток полей.

Задача состоит в том, что бы объединять листы из этих файлов в один xlsx-файл.

Использую ClosedXML библиотеку. Файлы гружу с параметром XLEventTracking.Disabled. Начал с того, что воспользовался методом листа CopyTo. Всё хорошо, копирует как надо, но памяти потребляет такое 2+ Gb на файлах с ~1800 записей. И к тому же, работает всё очень долго. Может(в зависимости от мощности машины) до пяти минут копировать. Глянул в отладчик, пухнет Dictionary с IXLCell внутри.

Переписал всё с отключенными пересчётом формул, старался без нужды не сохранять ячейки. Проверяю на наличие формулы и копирую только её текстовое представление. Потребление памяти снизилось до 300-400 мегабайт, и время объединения до 20-40 секунд. Но файлы могут быть по 40 мегабайт каждый, где всё снова станет очень плохо.

Пока есть единственная мысль, работать напрямую с XML файлами, которые представляют собой xlsx файлы. Но может есть какие-то возможности менее болезненно объединять xlsx-файлы и с ClosedXML? Или такие возможности есть в OpenXML, который является основой для ClosedXML?


Ответы (0 шт):