我正在开发一个WPF应用程序,我想在其中加密和压缩大量DataSet或对象(<2MB)并通过网络发送它。另一方将解压缩并解密数据并使用它。此过程将从服务器(WCF)到客户端和客户端到服务器。
任何人都可以向我推荐压缩类(DeflateStream / GzipStream)。
感谢
VJ
答案 0 :(得分:1)
大多数人都会混淆“压缩的最终尺寸”==“更好的网络性能”。一般来说,使用“优于deflate”类压缩算法可以降低传输带宽,但它们可以增加总传输时间(压缩+传输+解压缩)。从这个意义上说,LZ级压缩机看起来最好。最快的实施可以是QuickLZ或LZ4。它们都有一个C#版本。但是,它们的实现并不完全如同DeflateStream(实际上更简单易用)。 QuickLZ在网络相关应用程序上的使用越来越多,而LZ4最近修补了Apache Hadoop源代码主干,而不是Google的Snappy。
如果您需要更多压缩,可以抓取LZMA SDK,其中包含托管LZMA压缩/解压缩方法。但是,我应该警告你,LZMA的内存消耗通常非常高(取决于参数)。因此,产生几个LZMA驱动的线程可能不是你真正想要的。
如果您仍需要越来越多的压缩,请查看PPM或按位CM类算法。 PPM在文本数据方面非常出色,并且具有平均速度(通常为2-3 MiB / sec)。另一方面,CM在二进制数据方面非常出色。它们的内存消耗可能很高(取决于参数)而且非常慢(1 MiB / sec甚至几个字节/秒,取决于算法)。不幸的是,您可能只能在互联网上找到PPM .NET实现。但是,由于高复杂性,CM在.NET中很难找到。我已经在.NET中编写了order0 bitwise coder,如果你真的需要,可以使用其他模型扩展到适当的CM。