概述
大多數壓縮演算法都是為單核心處理器設計的。然而,在多核心 CPU 時代,利用所有 CPU 核心來加快存檔創建速度是有益的。 Aspose.ZIP 為某些存檔格式提供了此功能。BZIP2、LZIP 和 XZ 檔案的平行方法
由於這些演算法的區塊性質,並行化是可能的。在程序級別,這些檔案使用常見的多核心壓縮方法。使用者可以透過 CompressionThreads 屬性設定執行緒數。因此,如果該屬性超過一個,則將使用多個 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 });
}
如何使用 .NET 壓縮資料夾
ZIP 檔案的目的是將一個或多個檔案或資料夾壓縮並合併到一個統一的容器中。在 .NET 中,您可以使用 ZipFile 類別來處理 ZIP 檔案和壓縮。 歸檔的主要目標通常是減小儲存或傳輸的檔案大小,同時結合加密措施以增強安全性。除了傳統的檔案壓縮工具之外,自動壓縮/提取功能還可以在各種桌面和 Web 應用程式中找到應用,從而促進上傳、下載、共用或加密檔案等任務。
7Z LZMA2 檔案
7Z格式壓縮方法之一是 LZMA2 ,它可以在多個執行緒中進行壓縮。與先前的檔案類似,您可以透過 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");
}
ZIP 檔案的平行方法
對於先前的存檔類,並行化應用於區塊或演算法層級。對於 ZIP 存檔,入門級是可能的。為此,請在存檔保存時實例化 ParallelOptions 。
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 }
});
}
記憶體中並行壓縮設定策略用於多任務
設定ParallelCompressInMemory表示我們選擇多任務的策略。 這裡有三個 選項 :ParallelCompressionMode.Never: 壓縮所有條目是順序的。只有一個 CPU 核心負責壓縮並在壓縮資料到來時刷新它。
ParallelCompressionMode.Always: 它強制壓縮不同執行緒中的條目,無論條目大小、可用記憶體和其他因素為何。每個 CPU 核心同時壓縮一個文件,並將其壓縮資料保存在 RAM 中。條目被壓縮後,它會刷新到結果流。如果您的RAM 量很小,並且某些N 個條目(其中N 是CPU 核心數)的總大小很大,則可能會出現CLR 可用的所有RAM 都會耗盡並出現OutOfMemoryExcepton 的情況。 ParallelCompressionMode.Auto: 它估計 CPU 核心、條目大小、可用內存,並選擇是否並行或順序壓縮條目。在此模式下,一些較小的條目將被並行壓縮,而其他條目將被順序壓縮。由於記憶體消耗較高,LZMA 和 PPMd 條目不會並行壓縮。一般來說,選擇此選項是安全的; Aspose.ZIP 對估計持謹慎態度,並切換到順序壓縮作為後備。此模式的 ParallelOptions 還有一個屬性 - AvailableMemorySize。對於任何其他模式來說都是沒有意義的。粗略地說,它是所有 CPU 核心壓縮條目時分配的記憶體上限,以兆位元組為單位。 Aspose.ZIP 使用該數字來估計可以安全並行壓縮的最大條目大小。高於閾值的條目將被順序壓縮。 AvailableMemorySize 是一把雙刃劍:如果條目設定得太高,可能會導致 RAM 耗盡,頻繁的交換,甚至可能出現記憶體不足的異常。如果設定得太低,大多數條目將以順序方式壓縮,而沒有太多加速。因此,經驗豐富的使用者可以考慮權衡來分配它。
其他支援的 Aspose.ZIP for .NET API 功能
使用 Aspose.ZIP C# 庫來轉換、合併、編輯 zip 文件文檔、從檔案中提取資料等等!
Support and Learning Resources
- Learning Resources
- Documentation
- Source Code
- API References
- Tutorial Videos
- Product Support
- Free Support
- Paid Support
- Blog
- Release Notes
- Why Aspose.ZIP for .NET?
- Customers List
- Success Stories