我在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
相关的帖子,虽然它承诺提供紧凑的序列化格式,但我还没有意识到实践中的好处。
提前致谢。