0

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

  1. 我想要高效的压缩类(想坚持使用 .Net 压缩类)。
  2. 压缩和解压缩所需的时间更少。
  3. 压缩率高,而数据检索应为 100%。

任何人都可以向我推荐压缩类(DeflateStream/GzipStream)。

谢谢
主播

4

1 回答 1

1

大多数人混淆“压缩的最终大小”==“更好的网络性能”。一般来说,使用“优于deflate”类压缩算法可以减少传输带宽,但会增加总传输时间(压缩+传输+解压缩)。从这个意义上说,LZ 类压缩器似乎是最好的。最快的实现可以是QuickLZLZ4。它们都有 C# 版本。但是,它们的实现并不完全像 Def​​lateStream 那样(实际上使用起来更简单)。QuickLZ 在网络相关应用程序上的使用越来越多,而 LZ4 最近被修补到 Apache Hadoop 源主干中,而不是 Google 的 Snappy。

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

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

于 2011-12-24T10:46:20.700 回答