0

我正在开发一个WPF应用程序,在该应用程序中,我想要加密和压缩沉重的DataSet或对象(< 2MB)并通过网络发送它。另一方会解压并解密数据并将其消耗。此过程将从服务器(WCF)到客户端和客户端到服务器两端。DataSet或任何.Net对象的压缩/解压缩

  1. 我想要高效的压缩类(想坚持.Net压缩类)。
  2. 需要较少的时间进行压缩和解压缩。
  3. 压缩率高,而数据检索应该是100%。

任何人都可以建议我关于压缩类(DeflateStream/GzipStream)。

感谢
VJ

+0

我之前就已经走过这条路,发现尺寸必须非常大才能让您获得压缩的ROI。发送大量数据需要时间,但压缩和解压缩可能需要更多时间。两种方式做一些测试。 – slugster 2011-02-16 06:50:33

回答

1

多数人混淆了 “压缩的最终大小” == “更好的网络性能。”一般意义上讲,使用“优于放大”的类压缩算法可以减少传输带宽,但它们可以增加总传输时间(压缩+传输+解压缩)。从这个意义上讲,LZ级压缩机看起来最好。最快的实施可以是QuickLZLZ4。他们都有一个C#版本。但是,它们的实现并不完全如DeflateStream(实际上更简单)。 QuickLZ在网络相关应用程序上的使用日益增多,而LZ4最近修补到Apache Hadoop源主干中,而不是Google的Snappy。

如果你需要更多的压缩,你可以抓取LZMA SDK,它由管理的LZMA压缩/解压缩方法组成。但是,我应该警告你,LZMA的内存消耗通常很高(取决于参数)。所以,产生几个LZMA驱动的线程不太可能是你真正想要的。

如果您仍然需要越来越多的压缩,请查看PPM或逐位CM类算法。 PPM在文本数据方面非常出色,并具有平均速度(通常2-3 MiB /秒)。另一方面,CM在二进制数据上非常好。他们的内存消耗可能很高(取决于参数),而且很慢(1 MiB/sec甚至几个字节/秒,取决于算法)。不幸的是,你只能在互联网上找到PPM .NET实现。但是,由于高复杂度,在.NET中找到CM确实很麻烦。我在.NET中编写了order0 bitwise coder,如果您真的需要,可以使用其他模型扩展到合适的CM。