Aperçu

La plupart des algorithmes de compression ont été conçus pour les processeurs monocœur. Cependant, à l’ère des processeurs multicœurs, il est avantageux d’utiliser tous vos cœurs de processeur pour accélérer la création d’archives. Aspose.ZIP offre cette fonctionnalité pour certains formats d'archives.

Méthodes parallèles sur les archives BZIP2, LZIP et XZ

La parallélisation est possible en raison de la nature bloquante de ces algorithmes. Au niveau du programme, ces archives utilisent une approche commune de compression multicœur. L’utilisateur peut définir le nombre de threads via la propriété CompressionThreads . Donc, si cette propriété est supérieure à une, plusieurs cœurs de processeur seront utilisés.

Sample 1 – Parallel compression to BZIP2

    using (Bzip2Archive archive = new Bzip2Archive())
    {
        archive.SetSource("data.bin");
        archive.Save("archive.bz2", new Bzip2SaveOptions() { CompressionThreads = 4 });
    }

Sample 2 - Parallel compression to LZIP

    var settings = new LzipArchiveSettings(16777216) { CompressionThreads = 4 }
    using (LzipArchive archive = new LzipArchive(settings))
    {
        archive.SetSource("data.bin");
        archive.Save("archive.lz");
    }

Sample 3 - Parallel compression to XZ

    using (Bzip2Archive archive = new Bzip2Archive())
    {
        archive.SetSource("data.bin");
        archive.Save("archive.bz2", new Bzip2SaveOptions() { CompressionThreads = 4 });
    }

Comment compresser un dossier avec .NET

Les archives ZIP servent à compresser et à consolider un ou plusieurs fichiers ou dossiers dans un conteneur unifié. Dans .NET , vous pouvez utiliser la classe ZipFile pour travailler avec des fichiers ZIP et la compression. L’objectif principal de l’archivage est généralement de réduire la taille du fichier destiné au stockage ou à la transmission, tout en intégrant des mesures de cryptage pour une sécurité renforcée. Au-delà des outils de compression de fichiers traditionnels, les fonctionnalités automatisées de compression/extraction trouvent des applications dans diverses applications de bureau et Web, facilitant des tâches telles que le téléchargement, le partage ou le cryptage de fichiers.

Archives 7Z LZMA2

L’une des méthodes de compression au format 7Z est LZMA2 , qui peut être compressée dans plusieurs threads. De la même manière que pour les types d’archives précédents, vous pouvez définir le nombre de threads via la propriété CompressionThreads.

Sample 1 – Parallel compression to 7Z LZMA2

    var settings = new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(){ CompressionThreads = 4 });
    using (SevenZipArchive archive = new SevenZipArchive(settings))
    {
        archive.CreateEntry("first.bin", "data.bin");
        archive.Save("result.7z");
    }

Méthode parallèle sur les archives ZIP

Pour les classes d’archives précédentes, la parallélisation était appliquée soit au niveau du bloc, soit au niveau de l’algorithme. Pour l’archive ZIP, c’est possible au niveau d’entrée. Pour ce faire, instanciez ParallelOptions lors de la sauvegarde des archives.

Sample 1 – Parallel compression to zip

    using (Archive archive = new Archive())
    {
        archive.CreateEntries(@"C:\Data");
        archive.Save(zipFile, new ArchiveSaveOptions()
        {
            ParallelOptions = new ParallelOptions() 
            { ParallelCompressInMemory = ParallelCompressionMode.Auto }
        });
    }

La stratégie de configuration Parallel-Compress-In-Memory est utilisée pour effectuer plusieurs tâches à la fois.

Le paramètre ParallelCompressInMemory indique la stratégie que nous choisissons pour effectuer plusieurs tâches. Voici trois options  :
ParallelCompressionMode.Never : 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, quelle que soit la taille de l’entrée, 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’une OutOfMemoryException se produise.
**ParallelCompressionMode.Auto : ** 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 et PPMd ne sont pas compressées en parallèle en raison d’une consommation de mémoire élevée. En général, 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 autre propriété 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, échange intense, et peut même être 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.

Autres fonctionnalités de l'API Aspose.ZIP pour .NET prises en charge

Utilisez la bibliothèque Aspose.ZIP C# pour convertir, fusionner, modifier des documents au format zip, extraire des données des archives, et bien plus encore !

  

Support and Learning Resources

  
  

Aspose.Zip offers individual archive processing APIs for other popular development environments, listed below: