我有一个WCF
托管在 Windows Server 2008/IIS 上的服务,它nettcpbinding
使用DataContractSerializer
. 此服务由存在各种性能问题的 Windows 窗体应用程序使用。为了减少通过我们的公司网络从服务器到客户端传输的有效负载,我决定使用该属性将protobuf-net
(版本 r580)序列化引擎集成到我的一些服务操作中。ProtoBehavior
在集成 之前protobuff-net
,序列化服务器响应的累积大小约为 18 MB。之后,它是 1.6 MB,通过客户端和服务器上的 WCF 跟踪日志验证;不幸的是,这并没有减少客户端应用程序的加载时间。
进一步深入研究后,我发现客户端通过网络接收的字节,pre-protobuf
与 post-protobuf
仅相差约 1MB,正如网络流量工具所报告的那样。怎么会这样?以序列化形式(由多条消息组成)相差近 15 MB 的有效载荷如何在通过网络传输时仅代表 1 MB 的差异?如果底层protobuff
流以某种方式组装,生成的 TCP 流是否会过度膨胀?
此外,我应该注意到protobuf-net
1.6 MB 的序列化有效负载由多个响应消息组成,其中一个本身大约为 1.25 MB;这可能是问题吗?我应该努力将其分解为较小的响应吗?如果有,门槛是多少?
我将不胜感激有关此的任何意见,因为这让我困惑了几个星期。我花了几个小时浏览与 相关的帖子protobuf-net
,虽然它兑现了提供紧凑序列化格式的承诺,但我无法在实践中实现它的好处。
提前致谢。