Ulasan

Kebanyakan algoritma kompresi dirancang untuk prosesor single-core. Namun, di era CPU multi-core, akan bermanfaat jika memanfaatkan semua core CPU Anda untuk mempercepat pembuatan arsip. Aspose.ZIP menyediakan kemampuan ini untuk beberapa format arsip.

Metode paralel pada arsip BZIP2, LZIP dan XZ

Paralelisasi dimungkinkan karena sifat blok dari algoritma ini. Pada tingkat program, arsip ini menggunakan pendekatan umum kompresi multi-inti. Pengguna dapat mengatur jumlah thread melalui properti CompressionThreads . Jadi jika properti ini lebih dari satu, beberapa inti CPU akan digunakan.

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

Cara Membuat Zip Folder dengan .NET

Arsip ZIP berfungsi untuk mengompresi dan menggabungkan satu atau beberapa file atau folder ke dalam satu wadah terpadu. Di .NET , Anda dapat menggunakan kelas ZipFile untuk bekerja dengan file ZIP dan kompresi. Tujuan utama pengarsipan biasanya adalah untuk mengurangi ukuran file untuk penyimpanan atau transmisi, sekaligus menggabungkan langkah-langkah enkripsi untuk meningkatkan keamanan. Di luar alat kompresi file tradisional, fitur kompresi/ekstraksi otomatis dapat diterapkan di beragam aplikasi desktop dan web, sehingga memfasilitasi tugas seperti mengunggah, mengunduh, berbagi, atau mengenkripsi file.

Arsip 7Z LZMA2

Salah satu metode kompresi format 7Z adalah LZMA2 , yang dapat dikompresi dalam beberapa thread. Mirip dengan jenis arsip sebelumnya, Anda dapat mengatur jumlah utas melalui properti 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");
    }

Metode Paralel pada arsip ZIP

Untuk kelas arsip sebelumnya, paralelisasi diterapkan pada tingkat blok atau algoritma. Untuk arsip ZIP dimungkinkan pada entry level. Untuk melakukannya, buat instance ParallelOptions pada penyimpanan arsip.

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

Strategi pengaturan Paralel-Kompres-Dalam-Memori digunakan untuk melakukan banyak tugas

Menyetel ParallelCompressInMemory menunjukkan strategi yang kita pilih untuk melakukan banyak tugas. Berikut tiga opsi :
ParallelCompressionMode.Never: kompresi semua entri berurutan. Hanya satu inti CPU yang berfungsi pada kompresi dan membuang data terkompresi saat data tersebut masuk.
ParallelCompressionMode.Always: Ini memaksa kompresi entri di thread yang berbeda terlepas dari ukuran entri, memori yang tersedia, dan faktor lainnya. Setiap inti CPU secara bersamaan mengompresi file dan menyimpan data terkompresi dalam RAM. Setelah entri dikompresi, entri tersebut mengalir ke aliran hasil. Jika jumlah RAM Anda kecil dan ukuran total beberapa N entri (di mana N adalah jumlah inti CPU) sangat besar, mungkin semua RAM yang tersedia untuk CLR akan habis dan timbul OutOfMemoryExcepton.
ParallelCompressionMode.Auto: Ini memperkirakan inti CPU, ukuran entri, memori yang tersedia dan memilih apakah akan mengompresi entri secara paralel atau berurutan. Dalam mode ini beberapa entri yang lebih kecil akan dikompresi secara paralel sementara yang lainnya secara berurutan. Entri LZMA dan PPMd tidak dikompresi secara paralel karena konsumsi memori yang tinggi. Secara umum, aman untuk menggunakan opsi ini; Aspose.ZIP berhati-hati dengan estimasi dan beralih ke kompresi berurutan sebagai cadangan. Ada properti ParallelOptions lain untuk mode ini - AvailableMemorySize. Tidak ada gunanya untuk mode lainnya. Secara kasar, ini adalah batas tertinggi alokasi memori saat mengompresi entri dengan semua inti CPU, dalam megabita. Aspose.ZIP menggunakan angka tersebut untuk memperkirakan ukuran entri terbesar yang aman untuk dikompresi secara paralel. Entri di atas ambang batas untuk dikompresi secara berurutan. AvailableMemorySize adalah pedang bermata dua: disetel terlalu tinggi dengan entri yang besar, dapat menyebabkan kehabisan RAM, pertukaran yang intens, dan bahkan mungkin pengecualian memori habis. Karena disetel terlalu rendah, sebagian besar entri akan dikompresi secara berurutan tanpa banyak peningkatan kecepatan. Jadi, pengguna tingkat lanjut dapat menetapkannya dengan mempertimbangkan trade-off.
Kami menyarankan Anda menggunakan berbagai mode kompresi paralel pada data biasa untuk menentukan pengaturan terbaik dalam kasus Anda.
  

Support and Learning Resources

  
  

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