【发布时间】:2023-03-24 08:11:01
【问题描述】:
我正在为 Web 内容实施 Deflate 和 GZip 压缩。 .NET Framework DeflateStream 的性能非常好(它的压缩效果不如 SharpZipLib,但速度要快得多)。不幸的是,它(以及我知道的所有其他库)错过了写入预压缩数据的函数,例如 stream.WritePrecompressed(byte[] buffer)。
使用此功能,可以在流中插入预压缩块。这可以减少压缩这部分的 cpu 负载并增加 web 服务器的总吞吐量。
是否有任何托管库能够做到这一点?或者,除了 ComponentAce 的 ZLIB.NET 之外,还有什么好的起点可以做到这一点?
【问题讨论】:
-
你确定有可能吗?使用 deflate 算法进行压缩会构建基于已压缩数据的内部数据结构,如果您将数据注入流中,则解压缩很可能不起作用,除非您在解压缩过程中也剥离了这些部分。
-
是的,这应该是可能的,Deflate 流被组织在块中,压缩可以重新启动或更改。插入可以开始一个新的块。如果可能,插入的预压缩块也可能具有允许适应现有霍夫曼树的特殊标头。如果没有,它会开始一个新的。
标签: c# .net compression deflate