在.NET中通过线路移动对象最有效的方法是什么?

Ang*_*ker 15 .net c# compression serialization

我一直在使用WebServices来传输数据,这对我很有帮助.它擅长发送小块数据.只要您必须移动具有大量属性的深层对象树,生成的XML汤就会获取100k的数据并将其转换为1MB.

所以我尝试过IIS压缩,但它让我不知所措.它压缩数据很好,但权衡是压缩/解压缩.然后我通过BinaryFormatter序列化对象并将其发送出去.然而,这更好,编码/解码的速度仍然存在.

无论如何,我听说我被困在00s,现在有更好的方法通过网络发送数据,如ProtocolBuffers,MessagePack等...

有人能告诉我这些新协议是否更适合发送大量数据,以及我是否缺少其他有效的方法来执行此操作?

通过有效,我的意思是带宽量,编码/解码速度,实施速度等......

Jon*_*eet 11

这取决于构成大部分数据的内容.如果你有很多带有少量字段的对象,并且它真的是"扩展"它们的残余,那么其他格式如协议缓冲区可以产生巨大的差异.我没有使用过MessagePack或Thrift,但我希望它们的大小可以大致相同.

在编码和解码速度方面,我相信Marc Gravell的Protocol Buffers我自己的实现都会胜过任何内置的序列化方案.


Ree*_*sey 6

这在很大程度上取决于您的优先级所在,以及您正在使用的客户端类型.

WCF提供了一些通过线路推送数据的好方法,包括许多绑定选项以及相当高效的序列化器,如DataContractSerializer.话虽这么说,其中许多东西都需要一个同样使用WCF的"富"客户端.

如果那不是一个选项,那么像Protocol Buffers这样的东西可能是一个非常好的方法.这为大多数数据提供了非常快速的序列化/反序列化以及合理的传输大小.