是否有人对协议缓冲区,BSON(二进制JSON)或JSON的性能有任何了解?
- 电线尺寸
- 序列化速度
- 反序列化速度
这些似乎是通过HTTP使用的良好二进制协议。我只是想知道从长远来看,对于C#环境哪个更好。
Answers:
节俭也是另一个类似协议缓冲区的替代方案。
Java社区在这些技术的序列化/反序列化和线路大小方面有很好的基准:https : //github.com/eishay/jvm-serializers/wiki
通常,JSON的线径稍大一些,而DeSer稍差一些,但是在无源IDL的情况下具有无处不在的优势和易于解释的能力。最后一点是Apache Avro试图解决的问题,它在性能方面胜过两者。
Microsoft已发布了C#NuGet软件包Microsoft.Hadoop.Avro。
这篇文章比较了.NET(包括JSON,BSON和XML)中的序列化速度和大小。
http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx
这是一些最近的基准测试,显示了流行的.NET序列化器的性能。
在燃烧的和尚基准测试显示序列化一个简单的POCO的性能,同时全面罗斯文基准测试显示,微软的罗斯文数据集的每个表序列化行的综合结果。
基本上,协议缓冲区(protobuf-net)比.NET(XML DataContractSerializer)中最快的基类库Serializer快7倍左右。它也比竞争产品小,因为它也是2.2倍比微软最紧凑的序列化格式(JsonDataContractSerializer)小。
ServiceStack的文本序列化器最接近二进制protobuf-net的性能,其Json序列化器仅比protobuf-net慢2.58倍。
协议缓冲区是为电线设计的:
JSON只是文本,需要对其进行解析。提示:将“十亿”整数编码为整数将需要很多字符:十亿= 12个字符(长标度),二进制形式适合uint32_t现在尝试编码一个double怎么办?这将使FAR更糟。
the wire
意味着只是网络。现在,当我们使用如此多的无线网络时,听起来可能很奇怪。