Επισκόπηση

Οι περισσότεροι αλγόριθμοι συμπίεσης σχεδιάστηκαν για επεξεργαστές μονού πυρήνα. Ωστόσο, στην εποχή των πολυπύρηνων 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 }
        });
    }

Η στρατηγική ρύθμισης 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, σε megabyte. Το 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: