Параллельный состав почтовых архивов
Обзор
Aspose.zip API обеспечивает возможность составлять почтовые архивы. Поскольку записи такого архива могут быть сжаты независимо, можно в некоторой степени параллелизировать создание архива.
Zip MultiThreaded: Объяснение
Используйте Paralleloptions, чтобы указать, что архив должен быть подготовлен с несколькими ядрами процессора.
Установка parallelcompressinmemory
(
getParallelCompressInmemory/
setParallelCpressInmemory) указывает на стратегию, которую мы выбираем для многозадачности.
Вот три варианта:
parallelCompressionMode.never
: сжатие всех записей является последовательным. Только одно ядро процессора работает по сжатию и промывает сжатые данные по мере их поступления.parallelCompressionMode.always
: он заставляет сжатие записей в разных потоках независимо от размера входа, доступной памяти и других факторов. Каждое ядро ЦП одновременно сжимает файл, храня его сжатые данные в ОЗУ. При входе сжимается, он промывает к потоку результатов. Если количество оперативной памяти невелико, и общий размер некоторых n записей (где n - количество ядер ЦП) огромно, может произойти, что вся оперативная память, доступная для CLR, исчерпает, а возникает OutofmemoryExcepton.parallelCompressionMode.auto
: интеллектуальный режим. Он оценивает ядра процессоров, размеры записей, доступную память и выбирает, сжимать записи параллельно или последовательно. В этом режиме некоторые меньшие записи будут сжаты параллельно, в то время как другие последовательно. Как правило, можно безопасно использовать эту опцию, Aspose.zip осторожно с оценками и переключателями для последовательного сжатия в качестве запасного. Существует еще одно свойство «paralleloptions» для этого режима -viestableememorysize
( GetaVailableMemorySize/ setaVailableMemorySize). Это бессмысленно для любого другого режима. Грубо говоря, это высокий предел выделенной памяти при сжатии записей со всеми ядрами процессора, в мегабайтах. Aspose.zip использует это число, чтобы оценить самый большой размер входа, который безопасен для сжатия параллельно. Записи над порогом, которые будут сжаты последовательно.ViestableMemorySize
-это обоюдоострый меч: быть слишком высоким с огромными записями, он может создавать истощение с бараном, интенсивное обмен и даже исключение в памяти. Будучи слишком низким, большинство записей будут сжиматься последовательными без особого ускорения. Таким образом, сложные пользователи могут назначить его с учетом компромисса.
Мы рекомендуем вам играть с различными режимами параллельного сжатия на ваших типичных данных, чтобы определить, какие настройки являются лучшими настройками в вашем случае.
Образец
1try (fileOutputStream ZipFile = new FileOutputStream ("archive.zip")) {
2 Попробуйте (Archive Archive = new Archive ()) {
3 archive.createEntry ("First.bin", "Data1.bin");
4 ...
5 archive.createEntry ("last.bin", "datan.bin");
6 Paralleloptions Paralleloptions = new Paralleloptions ();
7 paralleloptions.setparallelcpressinmemory (parallelcompressionmode.always);
8 ArchivesaveOptions Options = new ArchivesaveOptions ();
9 Options.SetParalleLoptions (Paralleloptions);
10 archive.save (zipfile, опции);
11 }
12} catch (ioException ex) {
13 System.out.println (Ex);
14}