gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:23:58 25 4
gpt4 key购买 nike

我有大约 270k 数据 block 对,每一对由一个 32KiB 和一个 16KiB block 组成。

当我将它们保存到一个文件时,我当然会得到一个非常大的文件。但是数据很容易被压缩。
使用 WinRAR 压缩 5.48GiB 文件后,经过强力压缩,生成的文件大小为 37.4MiB。

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

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

我想(很多?)当使用“全局”字典而不是每个 block 都有一个字典时,可以实现更好的压缩。

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

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

长篇短篇小说:Type1 主要由一个组成。Type2 主要由零和一组成Type3 主要由零组成大于 128 的值(尚未)出现。

16KiB block 几乎总是由零组成

最佳答案

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

随机评论:“......很多速度损失可能是......”不是解决性能问题的方法。测量一下,看看是不是真的。

关于C#快速/高效地压缩大量数据 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8191965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com