На самом деле работа с SharpZipLib не требует столько кода, как вы написали :) Если немного разобраться с его нутром. Однако есть некоторые не прямые моменты, особенно это касается добавление файла в определенную папку архива. Вы еще забыли перечислить алгоритмы сжатия, которые поддерживает SharpZipLib. Для быстрой работы у него есть классик FastZip. Увы лицензия на него, как я понял не позволяет использовать в платных продуктах.
За основу я взял пример «CreateZipFile», FastZip я тоже видел в примерах, но обилие дополнительного кода в примере отбило желание его использовать. Касательно алгоритмов сжатия, то это Zip, GZip, Tar и BZip2, но в статье я упомянул, что в этот раз не буду заниматься переводом, полное описание обеих библиотек доступно по ссылкам.
Не очень понятен вопрос, 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 в коммерческих проектах с закрытым исходным кодом.
интересно было бы услышать об использовании многоядерности современных процессоров в одном и другом случае, может быть оптимизация под многопоточность так влияет?
а как с загрузкой ядер?
в обоих случаях одинаковая? просто такая большая разница вызывает подозрение что один из вариантов использует многопоточность, а другой — нет
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, сохранилась табличка сравнения скорости архивации, при разном уровне сжатия:
Небольшое тестирование двух библиотек для работы с ZIP архивами (язык C#)