Composition parall�le des archives ZIP
Aper�u
L’API Aspose.ZIP offre la possibilit� de composer des archives ZIP.��tant donn� que les entr�es d’une telle archive peuvent �tre compress�es ind�pendamment, il est possible de parall�liser la cr�ation d’archives dans une certaine mesure.
ZIP multithread�: explication
Utilisez ParallelOptions pour indiquer que l’archive doit �tre pr�par�e avec plusieurs c�urs de processeur.
Le param�tre ParallelCompressInMemory indique la strat�gie que nous choisissons pour effectuer plusieurs t�ches. Voici trois options�:
ParallelCompressionMode.Never: la compression de toutes les entr�es est s�quentielle. Un seul c�ur de processeur fonctionne sur la compression et vide les donn�es compress�es au fur et � mesure.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 processeur compresse simultan�ment un fichier en conservant ses donn�es compress�es dans la RAM. Une fois l’entr�e compress�e, elle est envoy�e dans le flux de r�sultats. Si votre quantit� de RAM est petite et que la taille totale de certaines N entr�es (o� N est le nombre de c�urs de processeur) est �norme, il peut arriver que toute la RAM disponible pour le CLR s’�puise et qu’un OutOfMemoryExcepton se produise.ParallelCompressionMode.Auto: Le mode intelligent. Il estime les c�urs de processeur, 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 doivent �tre compress�es en parall�le tandis que d’autres de mani�re s�quentielle. Les entr�es LZMA ne sont pas compress�es en parall�le en raison d’une consommation de m�moire �lev�e. G�n�ralement, il est prudent d’opter pour cette option, Aspose.ZIP se m�fie des estimations et passe � la compression s�quentielle comme solution de repli. Il existe une propri�t� suppl�mentaire de ParallelOptions pour ce mode - AvailableMemorySize. Cela ne sert � rien 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 de processeur, en m�gaoctets. Aspose.ZIP utilise ce nombre pour estimer la plus grande taille d’entr�e qui peut �tre compress�e en toute s�curit� en parall�le. Entr�es au-dessus du seuil � compresser s�quentiellement. AvailableMemorySize est une arme � double tranchant�: �tant r�gl� trop haut avec des entr�es �normes, il peut produire un �puisement de la RAM, un �change intense et m�me une exception de m�moire insuffisante. �tant r�gl� trop bas, la plupart des entr�es seront compress�es de mani�re s�quentielle sans grande acc�l�ration. Ainsi, les utilisateurs avertis peuvent l’attribuer en tenant compte d’un compromis.
Nous vous encourageons � jouer avec diff�rents modes de compression parall�le sur vos donn�es typiques pour d�terminer quels sont les meilleurs param�tres dans votre cas.
Comment cr�er une archive ZIP avec compression parall�le dans un exemple C#
�tapes�: Cr�er une archive ZIP avec compression parall�le en C#
- Ouvrez un flux de fichiers (
FileStream) dansFileMode.Createpour cr�er un nouveau fichier ZIP (archive.zip). - Initialisez un nouvel objet
Archivepour g�rer les entr�es ZIP. - Utilisez la m�thode
CreateEntrypour ajouter plusieurs entr�es, telles que “first.bin” et “last.bin”, en utilisantFile.OpenReadpour lire � partir des fichiers source (data1.binetdataN.bin). - Configurez � ArchiveSaveOptions � avec � ParallelOptions �, o� � ParallelCompressInMemory � est d�fini sur � ParallelCompressionMode.Always �, permettant une compression parall�le pour un archivage plus rapide.
- Enregistrez l’archive avec les options sp�cifi�es en utilisant la m�thode
Save.
1 using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
2 {
3 using (Archive archive = new Archive())
4 {
5 archive.CreateEntry("first.bin", File.OpenRead("data1.bin"));
6 ...
7 archive.CreateEntry("last.bin", File.OpenRead("dataN.bin"));
8 archive.Save(zipFile, new ArchiveSaveOptions()
9 {
10 ParallelOptions = new ParallelOptions()
11 { ParallelCompressInMemory = ParallelCompressionMode.Always }
12 });
13 }
14 }