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#快速高效地压缩大量数据块
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- 输入按键事件处理程序 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01