GZipStream
クラスの使用以外に、.NETでのデータの圧縮に関するいくつかの推奨事項を探しています。
TCP経由で送信できるように、バイト配列の高速で高圧縮を探しています。
SharpZipLib は代替手段です。フレームワークライブラリGZipStreamよりも思慮深く書かれていると言われています
dataを圧縮している場合は、圧縮ではなく、高密度のシリアル化を検討する可能性があります。 protobufのようなもの。 ここにいくつかのC#実装 があります。既存のオブジェクトの場合、protobuf-netはIMOの実装が最も簡単です(開示:私は作成者ですが、無料などです)。ストリームにシリアル化するか、_byte[]
_が必要な場合は、別のMemoryStream
を使用します。
(HTTPの目立たない要求/応答ではなく)ソケットを介したcontinuousの使用については、_Serializer.SerializeWithLengthPrefix
_/_Serializer.DeserializeWithLengthPrefix
_操作(protobufには自体にターミネーターが含まれていないため、個別のメッセージを処理するには長さプレフィックスが必要です)。
DotNetZipはネイティブサポートを提供し、非常に使いやすいAPIを備えており、SharpZipLibよりも柔軟性があると思います。
編集:残念ながら、DotNetZipにはいくつかの重大な問題があり、プロジェクトはもはや積極的に維持されていないようです。したがって、このライブラリを本番コードでの使用に実際に推奨することはできません。
より良い代替案は、SharpZipLib(GPLベースのライセンスに準拠している場合)、 zlibの.NETポート の1つ、または this回答 。
LZMAは圧縮に最適なものの1つであると考えられています。 7-Zipは、LZMAのパブリックドメインSDK実装であり、ここから無料でダウンロードできます。
7zのLZMAアルゴリズムは、RARがLZMAよりも優れた特殊なルーチンを使用する.wavファイルや.bmpファイルなどの「マルチメディア」ファイルを除いて、RARよりも高い圧縮率に達します。[7] NanoZipやFreeArcなどの他の無料の圧縮ソフトウェアは通常WinRARよりも優れています。[8]
.NET 3+には、 ZipPackage クラスのZipサポートが組み込まれています。