protobuf-net序列化消息的低效传输

时间:2012-09-07 05:49:04

标签: wcf performance protocol-buffers protobuf-net nettcpbinding

我在Windows Server 2008 / IIS上托管WCF服务,使用nettcpbinding公开DataContractSerializer端点。此服务由Windows窗体应用程序使用,该应用程序遇到各种性能问题。为了减少通过公司网络从服务器到客户端传输的有效负载,我决定使用protobuf-net属性将ProtoBehavior(版本r580)序列化引擎集成到我的一些服务操作中。

在集成protobuff-net之前,序列化服务器响应的累积大小约为18 MB。之后,它是1.6 MB,在客户端和服务器上通过WCF跟踪日志验证;遗憾的是,这并没有导致客户端应用程序中的加载时间减少。

在进一步深入研究后,我发现客户端通过网络收到的字节(protobuf与后 - protobuf之间的差异仅相差大约1MB,如网络所报告的那样)交通工具。怎么会这样?有效载荷如何以序列化形式(包含多个消息)差异大约15 MB,仅通过网络传输时表示1 MB的差异?如果基础protobuff流以某种方式组合,那么生成的TCP流是否会过度膨胀?

此外,我应该注意到1.6 MB的protobuf-net序列化有效载荷由几个响应消息组成,其中一个响应消息本身约为1.25 MB;这可能是问题吗?我应该努力将其分解成更小的答案吗?如果是这样,门槛是多少?

我很感激任何有关此事的意见,因为它已经困扰了我几个星期了。我花了好几个小时来填写与protobuf-net相关的帖子,虽然它承诺提供紧凑的序列化格式,但我还没有意识到实践中的好处。

提前致谢。

0 个答案:

没有答案