Параллельное составление ZIP-архивов
Обзор
Aspose.ZIP API предоставляет возможность создавать ZIP-архивы. Поскольку записи такого архива можно сжимать независимо, создание архива можно в некоторой степени распараллелить.
Многопоточный ZIP: объяснение
Используйте ParallelOptions, чтобы указать, что архив необходимо подготовить с несколькими ядрами ЦП.
Настройка ParallelCompressInMemory указывает стратегию, которую мы выбираем для многозадачности. Вот три варианта:
ParallelCompressionMode.Never
: сжатие всех записей является последовательным. Только одно ядро ЦП работает над сжатием и сбрасывает сжатые данные по мере их поступления.ParallelCompressionMode.Always: принудительно сжимает записи в разных потоках независимо от размера записи, доступной памяти и других факторов. Каждое ядро ЦП одновременно сжимает файл, сохраняя сжатые данные в оперативной памяти. После сжатия записи она сбрасывается в поток результатов. Если объем вашей оперативной памяти невелик, а общий размер некоторых N записей (где N — количество ядер ЦП) огромен, может случиться так, что вся оперативная память, доступная для CLR, исчерпается и возникнет OutOfMemoryExcepton.
ParallelCompressionMode.Auto
: интеллектуальный режим. Он оценивает количество ядер ЦП, размеры записей, доступную память и выбирает, сжимать ли записи параллельно или последовательно. В этом режиме некоторые записи меньшего размера сжимаются параллельно, а другие - последовательно. Записи LZMA не сжимаются параллельно из-за высокого потребления памяти. Как правило, этот вариант безопасен: Aspose.ZIP осторожно относится к оценкам и переключается на последовательное сжатие в качестве запасного варианта. Для этого режима есть еще одно свойство ParallelOptions — AvailableMemorySize. Для любого другого режима это бессмысленно. Грубо говоря, это верхний предел выделяемой памяти при сжатии записей всеми ядрами процессора в мегабайтах. Aspose.ZIP использует это число для оценки максимального размера записи, которую можно безопасно сжимать параллельно. Записи, превышающие пороговое значение, подлежат последовательному сжатию. Доступный размер памяти — это палка о двух концах: если он установлен слишком высоко с огромными записями, это может привести к нехватке оперативной памяти, интенсивной подкачке и даже к исключению нехватки памяти. Если установлено слишком низкое значение, большинство записей будут сжиматься последовательно без особого ускорения. Таким образом, опытные пользователи могут назначить его, учитывая компромисс.
Мы рекомендуем вам поэкспериментировать с различными режимами параллельного сжатия ваших типичных данных, чтобы определить, какие настройки лучше всего подходят для вашего случая.
Как создать ZIP-архив с параллельным сжатием в примере C#
Шаги: Создайте ZIP-архив с параллельным сжатием на C#< /а>
- Откройте поток файлов («FileStream») в «FileMode.Create», чтобы создать новый ZIP-файл («archive.zip»).
- Инициализируйте новый объект «Архив» для управления записями ZIP.
- Используйте метод CreateEntry, чтобы добавить несколько записей, например «first.bin» и «last.bin», используя File.OpenRead для чтения из исходных файлов (data1.bin и
dataN.bin
). - Настройте «ArchiveSaveOptions» с помощью «ParallelOptions», где для параметра «ParallelCompressInMemory» установлено значение «ParallelCompressionMode.Always», что позволяет параллельное сжатие для более быстрого архивирования.
- Сохраните архив с указанными параметрами методом
Сохранить
.