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块几乎总是由零组成
如果你想尝试不同的压缩,你可以从适合你的数据的RLE开始 - http://en.wikipedia.org/wiki/Run-length_encoding - 即使在最简单的实现中它也会非常快.相关的http://en.wikipedia.org/wiki/Category:Lossless_compression_algorithms包含更多链接,可以启动其他算法,如果您想要自己推送或找到某人的实现.
随机评论:"......很多速度损失可能......"不是解决性能问题的方法.测量并查看它是否真的如此.
| 归档时间: |
|
| 查看次数: |
4944 次 |
| 最近记录: |