ภาพรวม

อัลกอริธึมการบีบอัดส่วนใหญ่ได้รับการออกแบบมาสำหรับโปรเซสเซอร์แบบคอร์เดียว อย่างไรก็ตาม ในยุคของ 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

  
  

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