有没有人有关于协议缓冲区与BSON(二进制JSON)或一般JSON的性能特征的任何信息?
这些似乎是用于HTTP的良好二进制协议。我只是想知道从长远来看哪个C#环境会更好。
以下是我在BSON和Protocol Buffers上阅读的一些信息。
Thrift也是另一种类似协议缓冲区的替代方案。
Java社区有关于序列化/反序列化以及这些技术的线缆大小的良好基准:https://github.com/eishay/jvm-serializers/wiki
一般来说,JSON的线径略大,DeSer稍差,但无处不在,并且无需源IDL即可轻松解读。最后一点是Apache Avro试图解决的问题,它在性能方面都胜过两者。
微软发布了一个C#NuGet包Microsoft.Hadoop.Avro。
This post比较了.NET中的序列化速度和大小,包括JSON,BSON和XML。
http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx
以下是some recent benchmarks,展示了流行的.NET Serializers的性能。
Burning Monks benchmarks显示了序列化一个简单的POCO的性能,而全面的Northwind benchmarks显示了在Microsoft Northwind数据集的每个表中序列化一行的组合结果。
基本上,协议缓冲区(protobuf-net)比.NET中最快的基类库Serializer(XML DataContractSerializer)快约7倍。它也比竞争对手小,因为它比微软最紧凑的序列化格式(JsonDataContractSerializer)小2.2倍。
ServiceStack的文本序列化器最接近匹配二进制protobuf-net的性能,其Json Serializer仅比protobuf-net慢2.58倍。
协议缓冲区是为电线设计的:
JSON只是文本,需要进行解析。提示:在其中编码一个“十亿”int会占用相当多的字符:Billion = 12 char(长规模),二进制它适合uint32_t现在尝试编码双精度怎么样?那会更糟糕。