Pull to refresh

Comments 20

На самом деле работа с SharpZipLib не требует столько кода, как вы написали :) Если немного разобраться с его нутром. Однако есть некоторые не прямые моменты, особенно это касается добавление файла в определенную папку архива. Вы еще забыли перечислить алгоритмы сжатия, которые поддерживает SharpZipLib. Для быстрой работы у него есть классик FastZip. Увы лицензия на него, как я понял не позволяет использовать в платных продуктах.
За основу я взял пример «CreateZipFile», FastZip я тоже видел в примерах, но обилие дополнительного кода в примере отбило желание его использовать. Касательно алгоритмов сжатия, то это Zip, GZip, Tar и BZip2, но в статье я упомянул, что в этот раз не буду заниматься переводом, полное описание обеих библиотек доступно по ссылкам.
Касательно алгоритмов сжатия, то это Zip, GZip, Tar и BZip2

А какие из них можно использовать в ZIP-файлах, не опасаясь что у кого-то сегодня могут возникнуть затруднения с его открытием?
Не очень понятен вопрос, ZIP архивами являются только первые. Обе библиотеки делают стандартные архивы, для DotNetZip ответ даже находится на главной странице (искать можно по строке «If I create a zipfile with this library, can I open it from within a Java/PHP/Python/C/Perl application? From within WinRar/WinZIP?»). А вот пример «проблем» для SharpZipLib, т.е. устранение проблем совместимости сводится в настройке. Хотя с другой стороны, в комментариях ниже, упоминается о проблемах перехода с одной библиотеки на другую при работе с gzip.
Не очень понятен вопрос, ZIP архивами являются только первые.

А, ясно. Я думал все (не заметил правда что Вы и tar там перечислили). Думал я так потому, что AFAIK ZIP-это какбы типа контейнер (по типу AVI/MKV/итп для видео, которое внутри может быть в виде сжатом самыми разными кодеками). Я в своё время где-то читал что формат ZIP развивается и в него добавляются всё новые современные методы компрессии (например в версии формата ZIP 2.0 была добавлена поддержка метода Deflate, который использовался в 7z). И это хоть само по себе и здорово, но логика подсказывает что, к примеру, встроенная в WinXP зиповалка скорее всего не прожуёт zip-файл, в котором данные сжаты по какому-нибудь методу, добавленному в ZIP-стандарт только в последние годы.
Насчет лицензии SharpZipLib вы не правы, как и автор поста, т.к. там есть прямая оговорка, разрешающая использовать SharpZipLib в коммерческих проектах с закрытым исходным кодом.
Ткните носом
Спасибо, исправил LGPL на GPL.
Это все как-то прозаично. Вот если бы вы алгоритм ZIP под GPU написали или, скажем, показали как это хардвэрно на FPGA крутится, было бы интересно.
интересно было бы услышать об использовании многоядерности современных процессоров в одном и другом случае, может быть оптимизация под многопоточность так влияет?
Хороший комментарий, т.к. забыл упомянуть, что тестирование велось на компьютере с AMD Athlon 64 X2 Dual Core Processor 3800+ (2,01 ГГц) и 2 Гб оперативной памяти.
а как с загрузкой ядер?
в обоих случаях одинаковая? просто такая большая разница вызывает подозрение что один из вариантов использует многопоточность, а другой — нет
1 — DotNetZip
2 — SharpZipLib
3 — ZipStorer (упоминается в комментариях ниже)

another test
1. А если попробовать добиться похожих результатов в итоговых размерах файлах и сравнить время?
2. Может таки включить в тестирование и ZipStorer? Тогда будет более понятно, почему вы заменяете его на DotNetZip
А еще было бы неплохо сравнить скорость распаковки.
1. К сожалению уже поздно, т.к. тестовые файлы я удалил, придется переделывать весь тест.
2. Немного не справедливо сравнивать ZipStorer с этими двумя библиотеками, но результаты получились такие для режима Deflate: 37 520 469 байт, 13687 мс. По скорости близка к DotNetZip, но вот сжатие практически на 30 процентов хуже.
Есть ещё такая небольшая подстава в том, что не всегда легко получится с одной библиотеки в проекте «пересесть» на другую.
Из личного печального опыта: gzip, запакованный SharpZipLib не всегда разворачивается DotNetZip-ом.
К плюсам SharpZipLib можно отнести также реализацию алгоритма BZip2 и наличие версий под Silverlight и WP7 (последняя немного с ограниченной функциональностью).
Год назад я тестировал разные библиотеки для работы с Zip. Использовал сначала SharpZipLib, потом выяснилось, что в этой библиотеке есть особенность: мне необходимо было проверять наличие пароля у готового архива, т.е. распаковывать только архив, защищенный паролем, с SharpZipLib это не удалось сделать (было давно, может я не разобрался), с DotNetZip все работает.
Библиотеку использовал на устройстве с Windows CE с .NET CF, сохранилась табличка сравнения скорости архивации, при разном уровне сжатия:
Sign up to leave a comment.

Articles