我有大约270k个数据块对,每个对由一个32KiB和一个16KiB的块组成。
当我将它们保存到一个文件中时,会得到一个非常大的文件。但是数据很容易压缩。使用WinRAR进行强压缩后,5.48GiB的文件大小变为了37.4MiB。
但是我需要随机访问每个单独的块,因此我只能逐个压缩块。为此,我使用了.NET提供的Deflate类,将文件大小减小到了382MiB(这已经可以接受了)。但速度不够快。
很多速度损失可能是由于始终为每个块创建新的MemoryStream和Deflate实例引起的。但似乎它们并不是设计用于重复使用的。
而且我想(更好的?)压缩可以通过使用“全局”字典来实现,而不是为每个块都使用一个字典。
是否有适合该任务的压缩算法实现(最好是C#)?
以下链接包含每个字节号出现的百分比,分为三种块类型(仅限32KiB块)。第一和第三种块类型的出现率为37.5%,第二种为25%。 块类型百分比 长话短说: Type1主要由1组成。 Type2主要由0和1组成。 Type3主要由0组成。 大于128的值尚未出现。
16KiB块几乎总是由零组成。
当我将它们保存到一个文件中时,会得到一个非常大的文件。但是数据很容易压缩。使用WinRAR进行强压缩后,5.48GiB的文件大小变为了37.4MiB。
但是我需要随机访问每个单独的块,因此我只能逐个压缩块。为此,我使用了.NET提供的Deflate类,将文件大小减小到了382MiB(这已经可以接受了)。但速度不够快。
很多速度损失可能是由于始终为每个块创建新的MemoryStream和Deflate实例引起的。但似乎它们并不是设计用于重复使用的。
而且我想(更好的?)压缩可以通过使用“全局”字典来实现,而不是为每个块都使用一个字典。
是否有适合该任务的压缩算法实现(最好是C#)?
以下链接包含每个字节号出现的百分比,分为三种块类型(仅限32KiB块)。第一和第三种块类型的出现率为37.5%,第二种为25%。 块类型百分比 长话短说: Type1主要由1组成。 Type2主要由0和1组成。 Type3主要由0组成。 大于128的值尚未出现。
16KiB块几乎总是由零组成。