OutOfMemoryException при создании большого ZIP-файла с использованием System.IO.Packaging

Я пытаюсь отладить исключение OutOfMemoryException , которое возникает при создании довольно большого ZIP файла с использованием ] System.IO.Packaging.ZipPackage .

Код выполняет итерацию по большому списку объектов, выполняя следующие действия для каждого объекта.

  1. Сериализация данных объекта во временный файл.
  2. Создание PackagePart для файла.
  3. Копировать из источника System.IO.Stream в другой:
    • Исходный поток: FileStream
    • Целевой поток: PackagePart :: GetStream ( ) => MS.Internal.IO.Zip.ZipIOModeEnforcingStream

Наконец, он вызывает Package :: Close () , который сохраняет файл.

Проблема, с которой я столкнулся, заключается в том, что для особенно большого списка объектов я вижу исключение OutOfMemoryException (размер процесса x86 приближается к размеру 1,2 ГБ).

Я думал о разделении данных объекта на куски, чтобы обрабатывать только меньшее количество за цикл (т.е. шаги 1-3 выше). Идея состоит в том, что я бы создал ZIP-файлы n во временном каталоге, а затем нашел бы способ объединить их в один архив.

Возможно ли это с помощью System.IO.Packaging ? Что бы я использовал для объединения частей?

Или есть способ лучше исправить это?

6
задан LeopardSkinPillBoxHat 21 October 2011 в 03:55
поделиться