gpt4 book ai didi

c# - wcf 条件压缩

转载 作者:太空宇宙 更新时间:2023-11-03 11:41:33 25 4
gpt4 key购买 nike

我最近插入了一个自定义编码器(使用二进制编码器进行实际编码,使用 Gzip 压缩器压缩字节数组)。它工作正常。现在的问题是对于小消息大小,它实际上会使字节数组膨胀。我想知道是否有办法避免这种情况。特别是如果有一种方法可以应用条件压缩和解压缩。

我确实尝试过做一些类似的事情——放置一个条件

if(buffer.Count <= 5000)
skip compression

但问题是在另一端即使字节未压缩也会发生解压。我希望这是有道理的。

以下是压缩和解压缩发生的函数(来自 CompactMessageEncoder 的代码片段)

public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
{

ArraySegment<byte> decompressedBuffer = DecompressBuffer(buffer, bufferManager);
LogWrite("Decompressed from {0} bytes to {1} bytes", buffer.Count, decompressedBuffer.Count);

Message returnMessage = _innerEncoder.ReadMessage(decompressedBuffer, bufferManager);

returnMessage.Properties.Encoder = this;
return returnMessage;
}



public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
{
var buffer = _innerEncoder.WriteMessage(message, maxMessageSize, bufferManager, messageOffset);

var compressedBuffer = CompressBuffer(buffer, bufferManager, messageOffset);
LogWrite("Compressed from {0} bytes to {1} bytes", buffer.Count, compressedBuffer.Count);

return compressedBuffer;
}

最佳答案

如果您使用的是 http,并且您使用的是 IIS 7 或更高版本(6 也可以,但配置显然更难),您可以使用内置的 gzip/deflate 压缩。

参见 http://www.iis.net/ConfigReference/system.webServer/httpCompression

该链接还解释了诸如“minFileSizeForComp”之类的参数,这些参数恰好解决了您的问题。它还具有许多其他不错的参数,如“dynamicCompressionDisableCpuUsage”,一旦超过某个 cpu 负载,它将禁用压缩。

http 压缩的好处在于它是一个标准,客户端和服务器可以确定每个请求是否可以或想要使用标准 http 请求和响应 header 进行压缩。此外,压缩格式可以从 gzip 更改为 deflate,后者有几个优点,尽管使用不多。看 http://madskristensen.net/post/Compression-and-performance-GZip-vs-Deflate.aspxhttp://www.vervestudios.co/projects/compression-tests/

一个潜在的缺点 - 根据您的应用程序,http 压缩仅从服务器 -> 客户端完成,因此如果您的请求很大,这可能会成为一个问题,但在大多数情况下,服务器响应可能会更大比客户要求。编辑:如果您愿意添加 custom IHttpModule ,您甚至可以获得请求压缩。

我刚刚成功地将一个使用频繁的 20 台服务器从 GZIPMessageEncoder 迁移到 IIS 7.5 的 http 压缩。

附带说明一下,请不要在默认的缓冲传输模式下使用 MS 的 GzipMessageEncoder 示例。 GzipMessageEncoder 只会浪费大量内存——在我的特殊情况下会浪费数百兆字节,请在此处查看我的回答:WCF HttpTransport: streamed vs buffered TransferMode

关于c# - wcf 条件压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631627/

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