نظرة عامة

تم تصميم معظم خوارزميات الضغط للمعالجات أحادية النواة. ومع ذلك، في عصر وحدات المعالجة المركزية متعددة النواة، من المفيد الاستفادة من جميع مراكز وحدة المعالجة المركزية لديك لتسريع عملية إنشاء الأرشيف. يوفر Aspose.ZIP هذه الإمكانية لبعض تنسيقات الأرشيف.

الطرق الموازية في أرشيفات BZIP2 وLZIP وXZ

التوازي ممكن بسبب طبيعة الكتلة لهذه الخوارزميات. على مستوى البرنامج، تستخدم هذه الأرشيفات أسلوبًا شائعًا للضغط متعدد النواة. يمكن للمستخدم ضبط عدد المواضيع عبر خاصية CompressionThreads . لذا، إذا كانت هذه الخاصية أكثر من واحدة، فسيتم استخدام العديد من نوى وحدة المعالجة المركزية.

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: يفرض ضغط الإدخالات في سلاسل رسائل مختلفة بغض النظر عن حجم الإدخال والذاكرة المتوفرة وعوامل أخرى. يقوم كل نواة وحدة المعالجة المركزية بضغط ملف في وقت واحد مع الاحتفاظ ببياناته المضغوطة في ذاكرة الوصول العشوائي. عند ضغط الإدخال فإنه يتدفق إلى تيار النتيجة. إذا كانت كمية ذاكرة الوصول العشوائي (RAM) لديك صغيرة وكان الحجم الإجمالي لبعض إدخالات N (حيث N هو عدد نوى وحدة المعالجة المركزية) كبيرًا، فقد يحدث أن جميع ذاكرة الوصول العشوائي المتاحة لـ CLR ستستنفد وينشأ OutOfMemoryExcepton.
**ParallelCompressionMode.Auto: ** يقوم بتقدير نوى وحدة المعالجة المركزية وأحجام الإدخالات والذاكرة المتوفرة ويختار ما إذا كان سيتم ضغط الإدخالات بالتوازي أو بالتسلسل. في هذا الوضع، يتم ضغط بعض الإدخالات الأصغر بالتوازي بينما يتم ضغط البعض الآخر بالتسلسل. لا يتم ضغط إدخالات LZMA وPPMd بالتوازي بسبب الاستهلاك العالي للذاكرة. بشكل عام، من الآمن اتباع هذا الخيار؛ يتوخى Aspose.ZIP الحذر بشأن التقديرات ويتحول إلى الضغط المتسلسل كإجراء احتياطي. هناك خاصية أخرى لـ ParallelOptions لهذا الوضع -availableMemorySize. لا جدوى من أي وضع آخر. بشكل تقريبي، هذا هو الحد الأقصى للذاكرة المخصصة أثناء ضغط الإدخالات بجميع مراكز وحدة المعالجة المركزية، بالميجابايت. يستخدم Aspose.ZIP هذا الرقم لتقدير الحجم الأكبر للإدخال الذي يمكن ضغطه بشكل متوازٍ. الإدخالات فوق العتبة التي سيتم ضغطها بالتتابع. AvailableMemorySize هو سيف ذو حدين: نظرًا لأنه تم ضبطه على مستوى عالٍ للغاية مع إدخالات ضخمة، فقد يؤدي إلى استنفاد ذاكرة الوصول العشوائي (RAM)، مبادلة مكثفة، وحتى قد يكون خارج استثناء الذاكرة. نظرًا لضبطه على مستوى منخفض جدًا، سيتم ضغط معظم الإدخالات بطريقة تسلسلية دون تسريع كبير. لذا، يمكن للمستخدمين المتمرسين تعيينها مع مراعاة المقايضة.
نحن نشجعك على استخدام أوضاع مختلفة للضغط المتوازي على بياناتك النموذجية لتحديد أفضل الإعدادات في حالتك.

ميزات Aspose.ZIP الأخرى المدعومة لـ .NET API

استخدم مكتبة Aspose.ZIP C# لتحويل مستندات الملفات المضغوطة ودمجها وتحريرها واستخراج البيانات من الأرشيفات والمزيد!

  

Support and Learning Resources

  
  

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