ภาพรวม
อัลกอริธึมการบีบอัดส่วนใหญ่ได้รับการออกแบบมาสำหรับโปรเซสเซอร์แบบคอร์เดียว อย่างไรก็ตาม ในยุคของ 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 และการบีบอัดได้ วัตถุประสงค์หลักของการเก็บถาวรโดยทั่วไปคือการลดขนาดไฟล์สำหรับการจัดเก็บหรือการส่งข้อมูล ขณะเดียวกันก็รวมเอามาตรการการเข้ารหัสเพื่อเพิ่มความปลอดภัย นอกเหนือจากเครื่องมือบีบอัดไฟล์แบบเดิมๆ คุณสมบัติการบีบอัด/แยกไฟล์อัตโนมัติยังค้นหาแอปพลิเคชันในเดสก์ท็อปและเว็บแอปพลิเคชันที่หลากหลาย ซึ่งอำนวยความสะดวกในงานต่างๆ เช่น การอัปโหลด ดาวน์โหลด การแชร์ หรือการเข้ารหัสไฟล์
ไฟล์เก็บถาวร 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 }
});
}
กลยุทธ์การตั้งค่า Parallel-Compress-In-Memory ใช้สำหรับการทำงานหลายอย่างพร้อมกัน
การตั้งค่า ParallelCompressInMemory บ่งบอกถึงกลยุทธ์ที่เราเลือกทำงานหลายอย่างพร้อมกัน ต่อไปนี้คือ สามประการ ตัวเลือก :ParallelCompressionMode.Never: การบีบอัดรายการทั้งหมด เป็นลำดับ CPU คอร์เพียงคอร์เดียวเท่านั้นที่ทำงานเกี่ยวกับการบีบอัดและล้างข้อมูลที่ถูกบีบอัดเมื่อมาถึง
ParallelCompressionMode.Always: บังคับให้มีการบีบอัดรายการในเธรดที่แตกต่างกัน โดยไม่คำนึงถึงขนาดของรายการ หน่วยความจำที่มีอยู่ และปัจจัยอื่น ๆ CPU แต่ละคอร์จะบีบอัดไฟล์พร้อมกันโดยเก็บข้อมูลที่ถูกบีบอัดไว้ใน RAM เมื่อรายการถูกบีบอัด รายการจะฟลัชไปยังสตรีมผลลัพธ์ หากจำนวน RAM ของคุณน้อยและขนาดรวมของรายการ N บางรายการ (โดยที่ N คือจำนวนคอร์ CPU) มีขนาดใหญ่มาก อาจเกิดขึ้นได้ว่า RAM ทั้งหมดที่มีสำหรับ CLR จะหมดลงและ OutOfMemoryExcepton เกิดขึ้น
ParallelCompressionMode.Auto: โดยจะประมาณแกน CPU ขนาดของรายการ หน่วยความจำที่มีอยู่ และเลือกว่าจะบีบอัดรายการแบบขนานหรือตามลำดับ ในโหมดนี้รายการเล็กๆ บางรายการจะถูกบีบอัดแบบขนาน ขณะที่รายการอื่นๆ ตามลำดับ รายการ LZMA และ PPMd จะไม่ถูกบีบอัดแบบขนานเนื่องจากมีการใช้หน่วยความจำสูง โดยทั่วไปจะปลอดภัยหากใช้ตัวเลือกนี้ Aspose.ZIP ระมัดระวังการประมาณค่าและเปลี่ยนไปใช้การบีบอัดตามลำดับเป็นทางเลือก มีอีกหนึ่งคุณสมบัติของ ParallelOptions สำหรับโหมดนี้ - AvailableMemorySize มันไม่มีประโยชน์สำหรับโหมดอื่น กล่าวโดยคร่าวๆ ก็คือขีดจำกัดสูงของหน่วยความจำที่จัดสรรขณะบีบอัดรายการด้วยคอร์ CPU ทั้งหมด ในหน่วยเมกะไบต์ Aspose.ZIP ใช้ตัวเลขนั้นเพื่อประมาณขนาดที่ใหญ่ที่สุดของรายการ ซึ่งสามารถบีบอัดแบบขนานได้อย่างปลอดภัย รายการที่สูงกว่าเกณฑ์จะถูกบีบอัดตามลำดับ AvailableMemorySize เป็นดาบสองคม: การตั้งไว้สูงเกินไปโดยมีรายการจำนวนมาก อาจทำให้ RAM หมดแรงได้ การสลับที่รุนแรง และอาจมีข้อยกเว้นหน่วยความจำไม่เพียงพอ เมื่อตั้งค่าต่ำเกินไป รายการส่วนใหญ่จะถูกบีบอัดตามลำดับโดยไม่ต้องเร่งความเร็วมากนัก ดังนั้น ผู้ใช้ที่เชี่ยวชาญสามารถมอบหมายมันได้โดยพิจารณาถึงข้อดีข้อเสีย
เราขอแนะนำให้คุณลองใช้โหมดต่างๆ ของการบีบอัดแบบขนานกับข้อมูลทั่วไปของคุณ เพื่อพิจารณาว่าการตั้งค่าใดดีที่สุดในกรณีของคุณ
Aspose.ZIP อื่นๆ ที่รองรับสำหรับฟีเจอร์ .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