Tổng quan

Hầu hết các thuật toán nén được thiết kế cho bộ xử lý lõi đơn. Tuy nhiên, trong thời đại CPU đa lõi, việc tận dụng tất cả các lõi CPU của bạn để tăng tốc độ tạo kho lưu trữ sẽ rất hữu ích. Aspose.ZIP cung cấp khả năng này cho một số định dạng lưu trữ.

Các phương pháp song song trên kho lưu trữ BZIP2, LZIP và Xperia

Có thể thực hiện song song hóa do tính chất khối của các thuật toán này. Ở cấp độ chương trình, các kho lưu trữ này sử dụng phương pháp nén đa lõi chung. Người dùng có thể đặt số lượng luồng thông qua thuộc tính CompressionThreads . Vì vậy, nếu thuộc tính này có nhiều hơn một thì nhiều lõi CPU sẽ được sử dụng.

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

Cách nén một thư mục bằng .NET

Kho lưu trữ ZIP phục vụ mục đích nén và hợp nhất một hoặc nhiều tệp hoặc thư mục vào một vùng chứa thống nhất. Trong .NET , bạn có thể sử dụng lớp ZipFile để làm việc với các tệp ZIP và nén. Mục tiêu chính của việc lưu trữ thường là giảm kích thước tệp để lưu trữ hoặc truyền tải, đồng thời kết hợp các biện pháp mã hóa để tăng cường bảo mật. Ngoài các công cụ nén tệp truyền thống, các tính năng nén/giải nén tự động còn có ứng dụng trong nhiều ứng dụng web và máy tính để bàn, hỗ trợ các tác vụ như tải lên, tải xuống, chia sẻ hoặc mã hóa tệp.

Lưu trữ 7Z LZMA2

Một trong những phương pháp nén định dạng 7Z là LZMA2 , có thể được nén thành nhiều luồng. Tương tự như loại lưu trữ trước đó, bạn có thể đặt số lượng luồng thông qua thuộc tính 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");
    }

Phương pháp song song trên kho lưu trữ ZIP

Đối với các lớp lưu trữ trước đó, việc song song hóa đã được áp dụng ở cấp độ khối hoặc cấp độ thuật toán. Đối với kho lưu trữ ZIP, có thể thực hiện được ở cấp độ đầu vào. Để thực hiện việc này, hãy khởi tạo ParallelOptions khi lưu kho lưu trữ.

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

Chiến lược thiết lập Parallel-Compress-In-Memory được sử dụng để thực hiện đa nhiệm

Việc cài đặt ParallelCompressInMemory cho biết chiến lược chúng tôi chọn để thực hiện đa nhiệm. Dưới đây là ba tùy chọn :
ParallelCompressionMode.Never: nén tất cả các mục là tuần tự. Chỉ có một lõi CPU hoạt động nén và xóa dữ liệu đã nén khi có.
ParallelCompressionMode.Always: Nó buộc nén các mục trong các luồng khác nhau bất kể kích thước mục nhập, bộ nhớ khả dụng và các yếu tố khác. Mỗi lõi CPU đồng thời nén một tệp để giữ dữ liệu nén của nó trong RAM. Khi mục nhập được nén, nó sẽ chuyển sang luồng kết quả. Nếu dung lượng RAM của bạn nhỏ và tổng kích thước của một số N mục (trong đó N là số lõi CPU) rất lớn thì có thể xảy ra trường hợp tất cả RAM có sẵn cho CLR sẽ cạn kiệt và phát sinh OutOfMemoryExcepton.
ParallelCompressionMode.Auto: Nó ước tính số lõi CPU, kích thước của các mục, bộ nhớ khả dụng và chọn nén các mục song song hay tuần tự. Trong chế độ này, một số mục nhỏ hơn sẽ được nén song song trong khi các mục khác sẽ được nén tuần tự. Các mục LZMA và PPMd không được nén song song do mức tiêu thụ bộ nhớ cao. Nói chung, chọn tùy chọn này là an toàn; Aspose.ZIP thận trọng với các ước tính và chuyển sang nén tuần tự như một phương án dự phòng. Có thêm một thuộc tính của ParallelOptions cho chế độ này - AvailableMemorySize. Nó là vô nghĩa đối với bất kỳ chế độ nào khác. Nói một cách đại khái, đó là giới hạn cao của bộ nhớ được phân bổ trong khi nén các mục có tất cả các lõi CPU, tính bằng megabyte. Aspose.ZIP sử dụng con số đó để ước tính kích thước mục nhập lớn nhất an toàn để nén song song. Các mục trên ngưỡng sẽ được nén tuần tự. AvailableMemorySize là con dao hai lưỡi: được đặt quá cao với các mục lớn, có thể gây cạn kiệt RAM, trao đổi mạnh mẽ và thậm chí có thể hết ngoại lệ bộ nhớ. Được đặt quá thấp, hầu hết các mục sẽ được nén theo cách tuần tự mà không cần tăng tốc nhiều. Vì vậy, những người dùng thông thạo có thể chỉ định nó bằng cách cân nhắc đánh đổi.
Chúng tôi khuyến khích bạn thử nghiệm các chế độ nén song song khác nhau trên dữ liệu thông thường của mình để xác định cài đặt nào là tốt nhất trong trường hợp của bạn.

Các tính năng Aspose.ZIP được hỗ trợ khác cho .NET API

Sử dụng thư viện Aspose.ZIP C# để chuyển đổi, hợp nhất, chỉnh sửa tài liệu tệp zip, trích xuất dữ liệu từ kho lưu trữ và hơn thế nữa!

  

Support and Learning Resources

  
  

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