Multithread-Einstellungen für Unix-Archive in C#
Überblick
XZ, Bzip2 und Lzip sind unter Linux üblich. Aufgrund ihrer Blockstruktur können sie in mehreren Threads komprimiert werden. Die Aspose.ZIP-API stellt allen „CompressionThreads“-Eigenschaften zur Verfügung, um bei der Komprimierung mehrere CPU-Kerne zu nutzen. Wenn Sie den Wert auf mehr als eins festlegen, kommt es zu einer Multi-Core-Komprimierung. Das Belassen dieser Option – die Standardoption – führt zur Komprimierung mit einem einzelnen CPU-Kern.
XZ-Multithread-Komprimierung
Es gibt die Eigenschaft CompressionThreads in „XzArchiveSettings“. Das folgende Codebeispiel zeigt, wie eine Datei mithilfe der XzArchive-Instanz komprimiert wird.
Schritte: Multithread-Komprimierungs-XZ-Archiv mit C# erstellen
- Öffnen Sie mit FileMode.Create einen Dateistream für das XZ-Archiv, um die komprimierten Daten zu schreiben.
- Öffnen Sie die Quelldatei (data.bin) mit FileMode.Open und legen Sie sie als zu komprimierende Daten fest.
- Erstellen Sie eine Instanz von XzArchiveSettings und geben Sie Folgendes an:
- CheckType als Crc32 zur Integritätsüberprüfung. – Für Multithread-Komprimierung ist „CompressionThreads“ auf 4 gesetzt.
- Erstellen Sie eine Instanz von XzArchive und übergeben Sie dabei die oben erstellten Einstellungen.
- Verwenden Sie SetSource, um die Quelldatei für die Komprimierung zuzuweisen.
- Speichern Sie das komprimierte XZ-Archiv mit der Save-Methode
1mit (FileStream xzFile = File.Open("archive.xz", FileMode.Create))
2{
3 using (FileStream source = File.Open("data.bin", FileMode.Open, FileAccess.Read))
4 {
5 var Settings = new XzArchiveSettings() { CheckType = XzCheckType.Crc32, CompressionThreads = 4 };
6 using (var archive = new XzArchive(settings))
7 {
8 archive.SetSource(source);
9 archive.Save(xzFile);
10 }
11 }
12}
Bzip2-Multithread-Komprimierung
Es gibt die Eigenschaft CompressionThreads in „Bzip2SaveOptions“. Das folgende Codebeispiel zeigt, wie eine Datei mithilfe der Bzip2Archive-Instanz komprimiert wird.
- Öffnen Sie mit FileMode.Create einen Dateistream für das Bzip2-Archiv, um die komprimierte Ausgabe zu speichern.
- Öffnen Sie die Quelldatei (data.bin) mit FileMode.Open und FileAccess.Read zum Lesen der unkomprimierten Daten.
- Erstellen Sie eine Instanz von Bzip2Archive und verwenden Sie die SetSource-Methode, um die Quelldatei für die Komprimierung zuzuweisen.
- Verwenden Sie die Save-Methode, um die Daten in das Bzip2-Archiv zu komprimieren, indem Sie Folgendes übergeben:
- Bzip2SaveOptions(9) zum Festlegen der maximalen Komprimierungsstufe. – Legen Sie „CompressionThreads“ für Multithread-Komprimierung auf 4 fest.
1 using (FileStream bz2File = File.Open("archive.bz2", FileMode.Create))
2 {
3 using (FileStream source = File.Open("data.bin", FileMode.Open, FileAccess.Read))
4 {
5 using (Bzip2Archive archive = new Bzip2Archive())
6 {
7 archive.SetSource(source);
8 archive.Save(bz2File, new Bzip2SaveOptions(9) { CompressionThreads = 4 });
9 }
10 }
11 }
Lzip-Multithread-Komprimierung
Es gibt die Eigenschaft CompressionThreads in „XzArchiveSettings“. Das folgende Codebeispiel zeigt, wie eine Datei mithilfe der XzArchive-Instanz komprimiert wird.
Schritte: Erstellen Sie ein Lzip-Archiv mit benutzerdefinierter Wörterbuchgröße und Multithreading durch C# 1. Öffnen Sie mit FileMode.Create einen Dateistream für das Lzip-Archiv, um die komprimierte Ausgabedatei zu erstellen. 2. Öffnen Sie die Quelldatei (data.bin) mit FileMode.Open und FileAccess.Read zum Lesen der unkomprimierten Daten. 3. Erstellen Sie eine Instanz von LzipArchiveSettings, geben Sie eine Wörterbuchgröße von 16777216 Bytes (16 MB) an und aktivieren Sie Multithreading mit CompressionThreads = 4. 4. Erstellen Sie eine Instanz von LzipArchive mit den oben definierten Einstellungen. 5. Verwenden Sie SetSource, um die Quelldatei für die Komprimierung zuzuweisen. 6. Komprimieren und speichern Sie das Archiv mit der Save-Methode und übergeben Sie dabei den Ausgabe-Lzip-Dateistream.
1 using (FileStream lzFile = File.Open("archive.lz", FileMode.Create))
2 {
3 using (FileStream source = File.Open("data.bin", FileMode.Open, FileAccess.Read))
4 {
5 var settings = new LzipArchiveSettings(16777216) { CompressionThreads = 4 }
6 using (LzipArchive archive = new LzipArchive(settings))
7 {
8 archive.SetSource(source);
9 archive.Save(lzFile);
10 }
11 }
12 }
In allen Beispielen werden vier Threads verwendet.