C#快速/高效地压缩大量数据块

Aro*_*okh 5 c# compression block

我有大约270k个数据块对,每对包含一个32KiB和一个16KiB块.

当我将它们保存到一个文件时,我当然得到一个非常大的文件.但数据很容易压缩.
使用WinRAR压缩5.48GiB文件后,压缩率很高,生成的文件大小为37.4MiB.

但我需要随机访问每个单独的块,所以我只能单独压缩块.
为此我使用了.NET提供的Deflate类,它将文件大小减小到382MiB(我可以使用).
但速度不够好.

很多速度损失可能是因为总是为每个块创建一个新的MemoryStream和Deflate实例.但似乎它们不是为了重复使用而设计的.

我猜(很多?)当使用"全局"字典而不是每个块有一个时,可以实现更好的压缩.

是否有适合该任务的压缩算法(最好是在C#中)的实现?

以下链接包含每个字节数出现的百分比,分为三种块类型(仅限32KiB块).第一种和第三种类型的出现率为37.5%,第二种类型为25%. 块类型百分比

长文件短篇小说:Type1主要包含一个.Type2主要由零组成,Type3主要由零组成.大于128的值不会出现(尚未).

16KiB块几乎总是由零组成

Ale*_*kov 5

如果你想尝试不同的压缩,你可以从适合你的数据的RLE开始 - http://en.wikipedia.org/wiki/Run-length_encoding - 即使在最简单的实现中它也会非常快.相关的http://en.wikipedia.org/wiki/Category:Lossless_compression_algorithms包含更多链接,可以启动其他算法,如果您想要自己推送或找到某人的实现.

随机评论:"......很多速度损失可能......"不是解决性能问题的方法.测量并查看它是否真的如此.