Порівняння бібліотек для архівації в

За лаштунками: ZLibNet, #ZipLib, DotNetZip і ZipStorer. Деталі опису:

Zipper zip = новий Zipper(); zip.ItemList.Add(inPath); zip.ZipFile = вихідний шлях; zip.PathInZip = enPathInZip.None; zip.Zip();

using ( ZipOutputStream s = new ZipOutputStream ( File . Create ( outPath ))) s . UseZip64 = UseZip64 . Off ; якщо (рівень != -1) s.SetLevel(рівень);

байт [] буфер = новий байт [4096]; Запис ZipEntry = новий ZipEntry ( Path . GetFileName ( inPath ) ) ; p.PutNextEntry(запис); використовуючи (FileStream fs = File. OpenRead (inPath)) int sourceBytes; do sourceBytes = fs Read ( buffer , 0 , buffer . Length ); с Запис ( буфер , 0 , вихідні байти ) ; > while ( sourceBytes > 0 ) ; > s. Finish ( ); s Закрити ( ); >

використовуючи (ZipFile zip = новий ZipFile()) zip.CompressionLevel = compressionLevel; ZipEntries = zip.AddFile(inPath, "" ); zip Зберегти (outPath); >

ZipStores zip = ZipStores.Create(outPath, "Про"); zip.AddFile(compressionLevel, inPath, inputFileName, ""); // Оновлює та закриває zip-файл zip.Close();

Тестування

День подяки

Попередні лапки в 3-х категоріях: сніжинка — сніжинка сніжинка, сніжинка якого — додаток SQLite, а якого — назва “Statement Processing System” англійською мовою а у безкоштовному pdf. Будь ласка, цитуйте посмішку на вашому обличчі, коли мова заходить про це. Дякую, що читаєте сніжинку сніжинки, на тором буде ввімкнено максимальне стиснення, до якого функція рівня сжатия Підпишіться на #ZipLib і DotNetZip, перевірте, чи зможете ви отримати найкращі результати ько вони.

Ціна 9 373 180 хв. Видалити елементи —логи листування аською з квипа. Отже, результати з максимальною швидкістю:

бібліотек

Отже, за швидкістю #ZipLib і zlibnet однакові, проте, друга бібліотека показує куди найкращий результат. Інші бібліотеки показують серйозне відставання за швидкістю. Тепер результати тесту на максимальний стиск:

Тут результати рівніші.

База даних, розміром 19407754 байт. Вміст бази – велика кількість рядків.

бібліотек

Ситуація ідентична текстовому файлу, тепер результати тесту на максимальний стиск:

І знову результати першого тесту повторюються: одна бібліотека трохи швидше, інша трохи краще стискає.

ПДФка з відсканованими сторінками, розміром 19407754 байт. Очікується, що стиснення особливого штибу не дасть, однак, давайте це перевіримо:

бібліотек

Розриви за розміром виявилися несуттєвими, проте швидкість відрізняється дуже значно. Цього разу в лідерах ZipStorer, що можна пояснити — у нього найгірший стиск. DotNetZip та #ZipLib показують практично однакові результати. Тепер результати тесту на максимальний стиск:

Розархівування.

Спочатку я перевірив усі архіви на читання. Усі бібліотеки можуть відкривати архіви, створені іншими бібліотеками, жодних несподіванок не виникло. Безпосередньо саме розархівування я тестуватиму на двох архівах: перший - база з першого тесту запакована найшвидшим способом, другий - той же файл, але з ультра стиском. Обидва архіви отримані за допомогою 7-zip. Розглянемо результати:

Парадоксально, але факт: усі бібліотеки розпаковували архів із максимальним стиском швидше, ніж із мінімальним. Дивують також гігантські розриви між бібліотеками.

Порівняння процесорів.

Тепер запущу тест на архіваціютестового файлу ще двох комп'ютерах. Перший – однорічний чотириядерний i7-870 (2.93GHz) 16Gb, і другий – трирічний ноутбук Dell 1525 T2370 (1.73GHz) 2Gb. Архівування бази даних:

DotNetZip

Результати дивують. Значний приріст показала лише DotNetZip. ZlibNet і ZipStorer показали дворазове зростання продуктивності при переході від ноутбука до двоядерного процесора, але вже 4х ядерник особливого приросту не дав, тобто. можна зробити висновок, що вони залежать швидше від частоти, ніж від кількості ядер. Але найбільш вражаючим є результат #ZipLib - на i7-870 стиск займає більше часу, ніж на старому ноутбучному процесорі. Пояснити подібну різницю мені важко. А ось результати розпакування архіву:

DotNetZip

Тут ситуація також незвичайна: і #ZipLib і DotNetZip на i7-870 працюють повільніше, ніж на E8400. Наостанок, наведу скріншоти диспетчера завдань під час роботи програми:

архівації

Тут червоним виділено період роботи ZLibNet, синім - #ZipLib, жовтим - DotNetZip, і фіолетовим - ZipStorer. Добре помітно, що DotNetZip вантажить обидва ядра на повну котушку. Що й підтверджує результати тесту порівняння.

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»