C# Compressing a lot of data blocks fast/efficiently(C#快速高效地压缩大量数据块)
问题描述
我有大约270k个数据块对,每个对由一个32KiB和一个16KiB块组成。当我将它们保存到一个文件时,我当然会得到一个非常大的文件。
但数据很容易压缩。
用WinRAR对5.48GiB文件进行强压缩后,得到的文件大小为37.4MiB。
但我需要随机访问每个单独的块,因此我只能单独压缩这些块。
为此,我使用了.NET提供的Deflate类,它将文件大小减少到382MiB(我可以接受)。
但是速度还不够好。
很大一部分速度损失可能是因为总是为每个块创建一个新的内存流和Deflate实例。
但它们似乎并不是为了重复使用而设计的。
我猜(多吗?)如果使用"全局"字典,而不是为每个块使用一个字典,则可以实现更好的压缩。
是否有适合该任务的压缩算法实现(最好是用C#)?
以下链接包含每个字节数出现的百分比,分为三种块类型(仅32KiB块)。 第一类和第三类封堵的出现率为37.5%,第二类封堵的出现率为25%。 Block type percentages 长篇短篇故事: 类型1主要由1组成。 类型2主要由0和1组成 类型3主要由零组成 尚未出现大于128的值。16KiB数据块几乎总是由零组成
推荐答案
如果您想尝试不同的压缩,您可以从适合您的数据的RLE开始-http://en.wikipedia.org/wiki/Run-length_encoding-即使在最简单的实现中,它也会非常快。相关http://en.wikipedia.org/wiki/Category:Lossless_compression_algorithms包含更多链接,如果您想使用自己的算法或找到某人的实现,可以开始使用其他算法。
随机评论:"……很多速度损失可能是……"不是解决性能问题的方法。衡量一下,看看是否真的是这样。这篇关于C#快速高效地压缩大量数据块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C#快速高效地压缩大量数据块
基础教程推荐
- SSE 浮点算术是否可重现? 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 如何激活MC67中的红灯 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01