.Netでアーカイブするためのライブラリを比較する

最近、私のプロジェクトには、アーカイブ用のライブラリが必要でした。 約6か月前、zlibnetライブラリを仕事に使用しましたが、印象はあまり良くありませんでしたので、代わりのものを探すことにしました。 短い検索の後、 アーカイブ用のライブラリのレビューに出会い、このレビューを書きました。

会員

ZLibNet#ZipLibDotNetZip 、およびZipStorerの 4つのライブラリをテストします。 次に、各詳細について:

Zlibnet
ライセンス: 無料
サイズ:35 KB + 137 KB(ZLib)
このライブラリは、よく知られているZLibライブラリのラッパーです。 ほとんどのコードは管理されていないため、著者は高いパフォーマンスを約束しています。
アーカイブのサンプルコード:
Zipper zip = new Zipper();
zip.ItemList.Add(inPath);
zip.ZipFile = outPath;
zip.PathInZip = enPathInZip.None;
zip.Zip();

#ZipLib
ライセンス: 変更されたGPL。 商用プロジェクトで使用できます。
サイズ:196 kB
ライブラリは完全にC#で記述されています。 GZip、Tar、BZip2形式のサポートも発表されています。
アーカイブのサンプルコード:
using (ZipOutputStream s = new ZipOutputStream( File .Create(outPath)))
{
s.UseZip64 = UseZip64.Off;
if (level != -1)
s.SetLevel(level);

byte [] buffer = new byte [4096];
ZipEntry entry = new ZipEntry(Path.GetFileName(inPath));
s.PutNextEntry(entry);
using ( FileStream fs = File .OpenRead(inPath))
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
s.Write(buffer, 0, sourceBytes);
}
while (sourceBytes > 0);
}
s.Finish();
s.Close();
}

ドットネットジップ
ライセンス: Ms-Pl
サイズ:277 kB(削除バージョン)
ライブラリは、.netおよびmonoプロジェクトでの使用に最も便利なものとして位置付けられています。 AES暗号化の宣言されたサポート。 多くのバージョンが存在すると便利な場合もあります。SilverLightのコンパクトなフレームワークの場合、完全な縮小バージョン(主な機能は残され、サイズは大幅に縮小されます)です。 また、bzip2とZLibのラッパーをサポートする個別のバージョンがあります。
アーカイブのサンプルコード:
using (ZipFile zip = new ZipFile())
{
zip.CompressionLevel = compressionLevel;
ZipEntry ze = zip.AddFile(inPath, "" );
zip.Save(outPath);
}

Zipstorer
ライセンス: Ms-Pl
サイズ:33 kB(ソース)
厳密に言えば、それはライブラリではなく、独立したクラスであり、その結果、プロジェクトへの統合が非常に簡単になり、何かが発生した場合に変更を加えるのが簡単になります。 可能性は非常に限られていますが、サイズを考えると、これに目を留めることができます。 古いバージョンは、 Silverlightで動作します。
以下は、被験者について言えることのすべての簡単な要約です。
アーカイブのサンプルコード:
ZipStorer zip = ZipStorer.Create(outPath, "About" );
zip.AddFile(compressionLevel, inPath, inputFileName, "" );
// Updates and closes the zip file
zip.Close();


テスト中


テストは次のように実行されます。各メソッドを100回実行し、時間を測定し、最悪の20回と最良の20回を削除し、残りの平均を計算します。 プラットフォーム:主なテストは、4ギガバイトのDDRIIメモリを搭載したE8400プロセッサ(3.0 GHz)で実施されました。 4つのライブラリはすべて1つのプログラムでテストされ、すべてのアクションを記録し、結果をcsvファイルに書き込みます。csvファイルはテーブルエディターで簡単に開くことができます。 IDE-VS2010。 .net 4.0を使用しました。

アーカイブ


テストは3つのファイルで実行されます。1つ目は大きなテキストファイル、2つ目はSQLiteデータベース、3つ目はKaramzinのpdf形式の書籍「ロシア国家の歴史」です。
各ファイルに対して2つのテストが実行されます。最初は、最大のパフォーマンスを保証する設定を持つすべてのライブラリがテストされ、2番目では、最大圧縮が有効になります。

Txtファイル。

これは、サイズが9,373,180バイトのテキストファイルです。 構造に関する文書は、QuipのICQに関する通信のログです。
したがって、最大速度での結果:



したがって、速度の点では#ZipLibとzlibnetは同じですが、2番目のライブラリの方がはるかに良い結果を示しています。 他のライブラリでは、速度が大幅に遅れています。 最大圧縮のテスト結果:



ここでは、結果はより均一です。

DBファイル。

データベースサイズ19 407 754バイト。 データベースの内容は多数の行です。



状況はテキストファイルと同じですが、現在は最大圧縮のテスト結果です。



繰り返しになりますが、最初のテストの結果が繰り返されます。1つのライブラリはわずかに高速で、もう1つのライブラリは少し良く圧縮されています。

PDFファイル。

スキャンされたページを含むPDF、サイズ19 407 754バイト。 圧縮ではあまり意味がないことが予想されますが、これを確認してみましょう。



サイズのギャップは重要ではありませんでしたが、速度は大きく異なります。 今回は、ZipStorerがリーダーであり、理解しやすい-最悪の圧縮率です。 DotNetZipと#ZipLibはほぼ同じ結果を示します。 最大圧縮のテスト結果:



時差がわずかに増加したことを除いて、状況はあまり変わりません。
最初はファイル名にキリル文字が含まれていて、ZipStorerだけが適切に対応していました(このため、次の行を追加する必要がありました:zip.EncodeUTF8 = true)。ZlibNetはそれとの連携をまったく拒否しました、および#ZipLibとDotNetZipが奇妙に詰まった:標準のWindowsビューアには空のアーカイブが表示されました。 展開するとソースファイルが得られましたが、名前ではすべてのキリル文字が置き換えられました。

解凍します。


まず、すべてのアーカイブを読んでチェックしました。 すべてのライブラリは、他のライブラリによって作成されたアーカイブを開くことができますが、驚くことはありません。
2つのアーカイブに直接解凍します。1つ目は、最速の方法でパッケージ化された最初のテストのベース、2つ目は同じファイルですが、超圧縮です。 両方のアーカイブは7-zipを使用して取得されました。 結果を考慮してください:



逆説的に、それは事実です。すべてのライブラリは、最小よりも高速に最大圧縮でアーカイブを解凍しました。 ライブラリ間の巨大なギャップも驚くべきものです。

プロセッサの比較。


次に、テストを実行して、さらに2台のコンピューターでテストファイルをアーカイブします。 1つは1年前のクアッドコアi7-870(2.93GHz)16Gb、2つ目は3年前のDell 1525 T2370(1.73GHz)2Gbラップトップです。
データベースのアーカイブ:



結果は驚くべきものです。 大幅な増加はDotNetZipによってのみ示されました。 ZlibNetとZipStorerは、ラップトップからデュアルコアプロセッサに切り替えるとパフォーマンスが2倍に向上しましたが、4xコアでは特別な向上はありませんでした。 コアの数よりも周波数に大きく依存していると結論付けることができます。 しかし、最も顕著な結果は#ZipLibです。i7-870では、古いラップトッププロセッサよりも圧縮に時間がかかります。 そのような違いを説明するのは難しいと思います。
アーカイブを解凍した結果は次のとおりです。



ここでも、状況は異常です。i7-870の#ZipLibとDotNetZipの両方がE8400より遅いです。
最後に、アプリケーションの実行中にタスクマネージャーのスクリーンショットを提供します。



ここでは、ZLibNet操作の期間が赤、青-#ZipLib、黄色-DotNetZip、紫-ZipStorerで強調表示されています。 DotNetZipが両方のコアを最大限にロードしていることが明確にわかります。 比較テストの結果を確認します。

結果。


テストは混合されました。 各ライブラリには長所と短所があります。 個人的には、DotNetZipを選択しました。そのシンプルなインターフェイスと、プロセッサのパワーに比べて予測可能なパフォーマンスの向上が気に入っています。
ソースコードはこちらにあります

Source: https://habr.com/ru/post/J138544/


All Articles