Panoramica

La maggior parte degli algoritmi di compressione sono stati progettati per processori single-core. Tuttavia, nell'era delle CPU multi-core, è vantaggioso utilizzare tutti i core della CPU per accelerare la creazione dell'archivio. Aspose.ZIP fornisce questa funzionalità per alcuni formati di archivio.

Metodi paralleli su archivi BZIP2, LZIP e XZ

La parallelizzazione è possibile a causa della natura a blocchi di questi algoritmi. A livello di programma questi archivi utilizzano l’approccio comune della compressione multi-core. L’utente può impostare il numero di thread tramite la proprietà CompressionThreads . Pertanto, se questa proprietà è più di una, verranno utilizzati diversi core della CPU.

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 });
    }

Come comprimere una cartella con .NET

Gli archivi ZIP hanno lo scopo di comprimere e consolidare uno o più file o cartelle in un contenitore unificato. In .NET , puoi utilizzare la classe ZipFile per lavorare con file ZIP e compressione. L’obiettivo principale dell’archiviazione è in genere quello di ridurre le dimensioni dei file per l’archiviazione o la trasmissione, incorporando al tempo stesso misure di crittografia per una maggiore sicurezza. Oltre ai tradizionali strumenti di compressione dei file, le funzionalità di compressione/estrazione automatizzate trovano applicazione in diverse applicazioni desktop e Web, facilitando attività come il caricamento, il download, la condivisione o la crittografia dei file.

Archivi 7Z LZMA2

Uno dei metodi di compressione del formato 7Z è LZMA2 , che può essere compresso in diversi thread. Analogamente al tipo precedente di archivi è possibile impostare il numero di thread tramite la proprietà 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");
    }

Metodo parallelo su archivi ZIP

Per le precedenti classi di archivio la parallelizzazione veniva applicata sia a livello di blocco che di algoritmo. Per l’archivio ZIP è possibile a livello base. Per farlo, istanziare ParallelOptions sul salvataggio dell’archivio.

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 strategia di configurazione Parallel-Compress-In-Memory viene utilizzata per il multitasking

L’impostazione ParallelCompressInMemory indica la strategia che scegliamo per il multitasking. Ecco tre opzioni :
ParallelCompressionMode.Never: compressione di tutte le voci è sequenziale. Solo un core della CPU funziona sulla compressione e scarica i dati compressi non appena arrivano.
ParallelCompressionMode.Always: impone la compressione delle voci in thread diversi indipendentemente dalle dimensioni della voce, dalla memoria disponibile e da altri fattori. Ogni core della CPU comprime simultaneamente un file mantenendo i dati compressi nella RAM. Una volta compressa, la voce viene scaricata nel flusso dei risultati. Se la quantità di RAM è piccola e la dimensione totale di alcune N voci (dove N è il numero di core della CPU) è enorme, può accadere che tutta la RAM disponibile per CLR si esaurisca e si verifichi OutOfMemoryExcepton.
ParallelCompressionMode.Auto: Stima i core della CPU, le dimensioni delle voci, la memoria disponibile e sceglie se comprimere le voci in parallelo o in sequenza. In questa modalità alcune voci più piccole vengono compresse in parallelo mentre altre in sequenza. Le voci LZMA e PPMd non vengono compresse in parallelo a causa dell’elevato consumo di memoria. In generale, è sicuro scegliere questa opzione; Aspose.ZIP è cauto con le stime e passa alla compressione sequenziale come fallback. C’è un’altra proprietà di ParallelOptions per questa modalità: AvailableMemorySize. È inutile per qualsiasi altra modalità. In parole povere, è il limite massimo della memoria allocata durante la compressione delle voci con tutti i core della CPU, in megabyte. Aspose.ZIP utilizza quel numero per stimare la dimensione maggiore della voce che può essere compressa in modo sicuro in parallelo. Le voci sopra la soglia verranno compresse in sequenza. AvailableMemorySize è un’arma a doppio taglio: essendo impostato troppo alto con voci enormi, può produrre esaurimento della RAM, scambio intenso e potrebbe anche essere un’eccezione di memoria insufficiente. Essendo impostato su un valore troppo basso, la maggior parte delle voci verrà compressa in modo sequenziale senza molta accelerazione. Pertanto, gli utenti più esperti possono assegnarlo considerando un compromesso.
Ti invitiamo a provare diverse modalità di compressione parallela sui tuoi dati tipici per determinare quali sono le impostazioni migliori nel tuo caso.
  

Support and Learning Resources

  
  

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