Паралельний склад ZIP -архівів
Огляд
Aspose.zip API забезпечує здатність складати архіви блискавки. Оскільки записи такого архіву можуть бути стиснуті незалежно, можна певною мірою паралелізувати створення архіву.
zip багатопотоковий: Пояснення
Використовуйте паралелопції, щоб вказати на те, що архів повинен бути підготовлений з декількома ядрами процесора.
Встановлення parallelcompressInmemory
(
getParalleLcompressInmemory/
setParallEcressInmemory) вказує на стратегію, яку ми вирішимо для багатозадачності.
Ось три варіанти:
ParalleLecressionMode.never
: Стиснення всіх записів є послідовним. Лише одне ядро процесора працює над стисненням і промиває стислі дані, коли воно надходить.ParalleLecressionMode.Always
: Це змушує стиснення записів у різних потоках незалежно від розміру входу, наявної пам’яті та інших факторів. Кожне ядро процесора одночасно стискає файл, зберігаючи свої стиснуті дані в оперативній пам’яті. Після запису стискається, він промивається до потоку результату. Якщо кількість вашої оперативної пам’яті невелика, а загальний розмір деяких N записів (де N - кількість ядер процесора) величезний, може статися, що вся оперативна пам’ять, доступна для CLR, буде вичерпаною і виникає OutofMemoryExcepton.ParalleLecressionMode.Auto
: Інтелектуальний режим. Він оцінює ядра процесора, розміри записів, наявну пам’ять і вибирає, чи стиснути записи паралельно чи послідовно. У цьому режимі деякі менші записи, які слід стиснути паралельно, а інші послідовно. Як правило, з цим варіантом можна безпечно, як Aspose.zip насторожено з оцінками та перемиканням на послідовне стиснення як резерв. Існує ще одна властивістьParalleloptions
для цього режиму -AcoableMeMorySize
( getavailableMeMorySize/ setavailablemorySize). Це безглуздо для будь -якого іншого режиму. Грубо кажучи, це висока межа виділеної пам’яті під час стискання записів з усіма ядрами процесора в мегабайтах. Aspose.zip використовує це число для оцінки найбільшого розміру входу, який безпечно для стиснення паралельно. Записи над порогом, що підлягають стисненню послідовно. `AssocialEmeMorySize ‘-це меч з двома острими: встановлений занадто високим з величезними записами, він може спричинити виснаження оперативної пам’яті, інтенсивне своп і навіть може бути за винятком пам’яті. Будучи занадто низьким, більшість записів будуть стислюватися послідовно без особливих прискорень. Отже, складні користувачі можуть призначити його з урахуванням компромісу.
Ми радимо вам грати з різними режимами паралельного стиснення на ваших типових даних, щоб визначити, які найкращі налаштування у вашому випадку.
Зразок
1спробуйте (fileOutputStream Zipfile = новий FileOutputStream ("archive.zip")) {
2 спробуйте (архів архів = новий архів ()) {
3 Archive.createEntry ("first.bin", "data1.bin");
4 ...
5 Archive.createEntry ("last.bin", "datan.bin");
6 Паралелопції паралелопції = нові паралелопції ();
7 paralleloptions.setparallelcompressinmemory (parallelcompressionmode.always);
8 ArchivesaveOptions Options = нові архівизавопції ();
9 параметри.setParallelOloptions (паралелопції);
10 Archive.save (Zipfile, варіанти);
11 }
12} улов (IOException ex) {
13 System.out.println (ex);
14}