web-dev-qa-db-ja.com

.NET圧縮ライブラリの推奨事項

GZipStreamクラスの使用以外に、.NETでのデータの圧縮に関するいくつかの推奨事項を探しています。

TCP経由で送信できるように、バイト配列の高速で高圧縮を探しています。

24
G-Man

SharpZipLib は代替手段です。フレームワークライブラリGZipStreamよりも思慮深く書かれていると言われています

4
BC.

dataを圧縮している場合は、圧縮ではなく、高密度のシリアル化を検討する可能性があります。 protobufのようなもの。 ここにいくつかのC#実装 があります。既存のオブジェクトの場合、protobuf-netはIMOの実装が最も簡単です(開示:私は作成者ですが、無料などです)。ストリームにシリアル化するか、_byte[]_が必要な場合は、別のMemoryStreamを使用します。

(HTTPの目立たない要求/応答ではなく)ソケットを介したcontinuousの使用については、_Serializer.SerializeWithLengthPrefix_/_Serializer.DeserializeWithLengthPrefix_操作(protobufには自体にターミネーターが含まれていないため、個別のメッセージを処理するには長さプレフィックスが必要です)。

11
Marc Gravell

DotNetZipはネイティブサポートを提供し、非常に使いやすいAPIを備えており、SharpZipLibよりも柔軟性があると思います。

DotNetZip

編集:残念ながら、DotNetZipにはいくつかの重大な問題があり、プロジェクトはもはや積極的に維持されていないようです。したがって、このライブラリを本番コードでの使用に実際に推奨することはできません。

より良い代替案は、SharpZipLib(GPLベースのライセンスに準拠している場合)、 zlibの.NETポート の1つ、または this回答

9
Dirk Vollmar

LZMAは圧縮に最適なものの1つであると考えられています。 7-Zipは、LZMAのパブリックドメインSDK実装であり、ここから無料でダウンロードできます。

http://www.7-Zip.org/sdk.html

圧縮アルゴリズムに関するウィキペディア

7zのLZMAアルゴリズムは、RARがLZMAよりも優れた特殊なルーチンを使用する.wavファイルや.bmpファイルなどの「マルチメディア」ファイルを除いて、RARよりも高い圧縮率に達します。[7] NanoZipやFreeArcなどの他の無料の圧縮ソフトウェアは通常WinRARよりも優れています。[8]

1
code4life

.NET 3+には、 ZipPackage クラスのZipサポートが組み込まれています。

1
Joel Mueller