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。