Übersicht

Die meisten Komprimierungsalgorithmen wurden für Single-Core-Prozessoren entwickelt. Im Zeitalter der Multi-Core-CPUs ist es jedoch von Vorteil, alle CPU-Kerne zu nutzen, um die Archiverstellung zu beschleunigen. Aspose.ZIP bietet diese Funktion für einige Archivformate.

Parallele Methoden für BZIP2-, LZIP- und XZ-Archive

Aufgrund des Blockcharakters dieser Algorithmen ist eine Parallelisierung möglich. Auf Programmebene verwenden diese Archive den gemeinsamen Ansatz der Multi-Core-Komprimierung. Der Benutzer kann die Anzahl der Threads über die Eigenschaft CompressionThreads festlegen. Wenn diese Eigenschaft also mehr als eins ist, würden mehrere CPU-Kerne verwendet.

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

So komprimieren Sie einen Ordner mit .NET

ZIP-Archive dienen der Komprimierung und Konsolidierung einer oder mehrerer Dateien oder Ordner in einem einheitlichen Container. In .NET können Sie die ZipFile-Klasse verwenden, um mit ZIP-Dateien und Komprimierung zu arbeiten. Das Hauptziel der Archivierung besteht in der Regel darin, die Dateigröße für die Speicherung oder Übertragung zu verringern und gleichzeitig Verschlüsselungsmaßnahmen für mehr Sicherheit einzubeziehen. Über herkömmliche Dateikomprimierungstools hinaus finden automatisierte Komprimierungs-/Extraktionsfunktionen Anwendung in verschiedenen Desktop- und Webanwendungen und erleichtern Aufgaben wie das Hochladen, Herunterladen, Teilen oder Verschlüsseln von Dateien.

7Z LZMA2-Archive

Eine der Komprimierungsmethoden im 7Z-Format ist LZMA2 , die in mehreren Threads komprimiert werden kann. Ähnlich wie bei früheren Archivtypen können Sie die Anzahl der Threads über die Eigenschaft „CompressionThreads“ festlegen.

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

Parallele Methode für ZIP-Archive

Bei früheren Archivklassen wurde die Parallelisierung entweder auf Block- oder Algorithmusebene angewendet. Für das ZIP-Archiv ist dies auf Einstiegsebene möglich. Instanziieren Sie dazu ParallelOptions beim Speichern des Archivs.

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

Die Setup-Strategie „Parallel-Compress-In-Memory“ wird für Multitasking verwendet

Die Einstellung ParallelCompressInMemory gibt die Strategie an, die wir für Multitasking wählen. Hier sind drei Optionen :
ParallelCompressionMode.Never: Komprimierung aller Einträge ist sequentiell. Nur ein CPU-Kern arbeitet an der Komprimierung und löscht komprimierte Daten, sobald sie ankommen.
ParallelCompressionMode.Always: Erzwingt die Komprimierung von Einträgen in verschiedenen Threads, unabhängig von der Eintragsgröße, dem verfügbaren Speicher und anderen Faktoren. Jeder CPU-Kern komprimiert gleichzeitig eine Datei und behält seine komprimierten Daten im RAM. Sobald der Eintrag komprimiert ist, wird er in den Ergebnisstrom geleert. Wenn Ihre RAM-Menge klein und die Gesamtgröße einiger N Einträge (wobei N die Anzahl der CPU-Kerne ist) sehr groß ist, kann es vorkommen, dass der gesamte für CLR verfügbare RAM erschöpft ist und OutOfMemoryExcepton auftritt.
ParallelCompressionMode.Auto: Es schätzt die CPU-Kerne, die Größe der Einträge und den verfügbaren Speicher und entscheidet, ob Einträge parallel oder sequentiell komprimiert werden sollen. In diesem Modus werden einige kleinere Einträge parallel komprimiert, andere sequentiell. LZMA- und PPMd-Einträge werden aufgrund des hohen Speicherverbrauchs nicht parallel komprimiert. Im Allgemeinen ist diese Option sicher; Aspose.ZIP ist bei Schätzungen vorsichtig und wechselt als Fallback zur sequentiellen Komprimierung. Für diesen Modus gibt es eine weitere Eigenschaft von ParallelOptions – AvailableMemorySize. Für jeden anderen Modus ist es sinnlos. Grob gesagt ist dies die Obergrenze des zugewiesenen Speichers beim Komprimieren von Einträgen mit allen CPU-Kernen in Megabyte. Aspose.ZIP verwendet diese Zahl, um die größte Eintragsgröße zu schätzen, die sicher parallel komprimiert werden kann. Einträge über dem Schwellenwert werden sequentiell komprimiert. AvailableMemorySize ist ein zweischneidiges Schwert: Wird es bei großen Einträgen zu hoch eingestellt, kann es zu RAM-Erschöpfung kommen. intensiver Austausch und möglicherweise sogar eine Ausnahme wegen nicht genügend Arbeitsspeicher. Bei einer zu niedrigen Einstellung werden die meisten Einträge ohne große Beschleunigung sequentiell komprimiert. So können erfahrene Benutzer es unter Berücksichtigung eines Kompromisses zuweisen.
Wir empfehlen Ihnen, mit verschiedenen Modi der parallelen Komprimierung Ihrer typischen Daten zu experimentieren, um herauszufinden, welche Einstellungen in Ihrem Fall die besten sind.

Weitere unterstützte Aspose.ZIP für .NET-API-Funktionen

Verwenden Sie die C#-Bibliothek Aspose.ZIP zum Konvertieren, Zusammenführen, Bearbeiten von Zip-Dateidokumenten, Extrahieren von Daten aus den Archiven und mehr!

  

Support and Learning Resources

  
  

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