DataSet或任何.Net对象的压缩/解压缩

时间:2011-02-16 06:25:37

标签: compression http-compression gzipstream data-compression deflatestream

我正在开发一个WPF应用程序,我想在其中加密和压缩大量DataSet或对象(<2MB)并通过网络发送它。另一方将解压缩并解密数据并使用它。此过程将从服务器(WCF)到客户端和客户端到服务器。

  1. 我想要高效的压缩类(想坚持.Net压缩类)。
  2. 缩短压缩和解压缩的时间。
  3. 压缩率高,而数据检索应为100%。
  4. 任何人都可以向我推荐压缩类(DeflateStream / GzipStream)。

    感谢
    VJ

1 个答案:

答案 0 :(得分:1)

大多数人都会混淆“压缩的最终尺寸”==“更好的网络性能”。一般来说,使用“优于deflate”类压缩算法可以降低传输带宽,但它们可以增加总传输时间(压缩+传输+解压缩)。从这个意义上说,LZ级压缩机看起来最好。最快的实施可以是QuickLZLZ4。它们都有一个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。