在中跨导线移动对象时,哪种方法最有效.NET
本文关键字:方法 NET 有效 对象 移动 | 更新日期: 2023-09-27 18:00:27
我一直在使用WebServices跨线路移动数据,这对我很有帮助。它擅长发送小块数据。一旦必须移动具有大量属性的深层对象树,生成的XML汤就会占用100k的数据并将其转换为1MB。
所以我尝试过IIS压缩,但它让我失望。它很好地压缩了数据,但代价是压缩/解压缩。然后,我通过BinaryFormatter对对象进行了序列化,并将其发送出去。这是更好的,然而,编码/解码的速度仍然存在。
无论如何,我听说我被困在00年代,现在有更好的方法可以通过网络发送数据,如ProtocolBuffers、MessagePack等
有人能告诉我,这些新协议是否更适合发送大量数据,以及我是否错过了一些其他有效的方法吗?
所谓高效,我指的是带宽量、编码/解码速度、实现速度等。
这取决于数据的主体。如果你只是有很多带有几个字段的对象,而真正"扩展"它们的是cruft,那么像协议缓冲区这样的其他格式可以产生巨大的差异。我还没有使用MessagePack或Thrift,但我预计它们可能会有大致相似的规模增长。
就编码和解码的速度而言,我相信Marc Gravell和我自己的Protocol Buffers实现都将优于任何内置的序列化方案。
这在很大程度上取决于您的优先级所在,以及您使用的客户端类型。
WCF提供了一些跨线推送数据的好方法,包括许多绑定选项以及相当高效的序列化程序,如DataContractSerializer。也就是说,这些东西中的许多都需要一个同时使用WCF的"富"客户端。
如果这不是一个选项,那么像协议缓冲区这样的东西可能是一个非常好的方法。这为大多数数据提供了非常快速的序列化/反序列化以及合理的传输大小。
您查看过Protobuf网络吗??
使用Simon Hewitt的库(用C#编写)执行串行化,在带宽和编码/解码速度方面都很有效。该库以C#源代码的形式分发。
唯一的办法就是避免。NET串行化来启动-对于库不支持的数据结构,必须在客户端代码中进行显式编码以避免。NET串行化。这影响了实现的速度,但我的大小提高了2-3倍,串行化所需时间提高了20-40倍。