Composition parall�le d'archives ZIP
Aper�u
L’API Aspose.ZIP permet de composer des archives ZIP. Comme les entr�es d’une telle archive peuvent �tre compress�es ind�pendamment, il est possible de parall�liser la cr�ation de l’archive dans une certaine mesure.
ZIP multithreaded : explication
Utilisez ParallelOptions pour indiquer que l’archive doit �tre pr�par�e avec plusieurs c�urs de CPU.
Le r�glage de ParallelCompressInMemory (
getParallelCompressInMemory/
setParallelCompressInMemory) indique la strat�gie que nous choisissons pour le multit�che.
Voici trois options :
ParallelCompressionMode.Never: la compression de toutes les entr�es est s�quentielle. Un seul c�ur de CPU travaille sur la compression et �vacue les donn�es compress�es au fur et � mesure qu’elles arrivent.ParallelCompressionMode.Always: Il force la compression des entr�es dans diff�rents threads ind�pendamment de la taille de l’entr�e, de la m�moire disponible et d’autres facteurs. Chaque c�ur de CPU compresse simultan�ment un fichier en conservant les donn�es compress�es dans la RAM. Une fois l’entr�e compress�e, elle est transf�r�e dans le flux de r�sultats. Si la quantit� de m�moire vive est faible et que la taille totale de certaines entr�es (o� N est le nombre de c�urs de CPU) est �norme, il peut arriver que toute la m�moire vive disponible pour le CLR soit �puis�e et que l’exception OutOfMemoryExcepton se produise.ParallelCompressionMode.Auto: Le mode intelligent. Il estime les c�urs du CPU, la taille des entr�es, la m�moire disponible et choisit de compresser les entr�es en parall�le ou s�quentiellement. Dans ce mode, certaines entr�es plus petites seront compress�es en parall�le et d’autres s�quentiellement. G�n�ralement, il est prudent de choisir cette option, Aspose.ZIP se m�fie des estimations et passe � la compression s�quentielle comme solution de repli. Il existe une autre propri�t� deParallelOptionspour ce mode -AvailableMemorySize( getAvailableMemorySize/ setAvailableMemorySize). Il est inutile pour tout autre mode. En gros, il s’agit de la limite sup�rieure de la m�moire allou�e lors de la compression des entr�es avec tous les c�urs du processeur, en m�gaoctets. Aspose.ZIP utilise ce nombre pour estimer la plus grande taille d’entr�e qui peut �tre compress�e en parall�le en toute s�curit�. Les entr�es d�passant le seuil seront compress�es s�quentiellement. Le param�treAvailableMemorySizeest une arme � double tranchant : s’il est r�gl� trop haut avec des entr�es �normes, il peut entra�ner l’�puisement de la m�moire vive, un �change intense, et m�me une exception de m�moire insuffisante. Si elle est trop basse, la plupart des entr�es seront compress�es de mani�re s�quentielle sans grande acc�l�ration. Les utilisateurs avertis peuvent donc l’attribuer en tenant compte du compromis.
Nous vous encourageons � jouer avec les diff�rents modes de compression parall�le sur vos donn�es typiques pour d�terminer quels sont les meilleurs param�tres dans votre cas.
Echantillon
1try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
2 try (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.setParallelCompressInMemory(ParallelCompressionMode.Always) ;
8 ArchiveSaveOptions options = new ArchiveSaveOptions() ;
9 options.setParallelOptions(parallelOptions) ;
10 archive.save(zipFile, options) ;
11 }
12} catch (IOException ex) {
13 System.out.println(ex) ;
14}