Xml,Json,Hessian,ProtocolBuffers序列化对⽐
简介
这篇博客主要对Xml,Json,Hessian,Protocol Buffers的序列化和反序列化性能进⾏对⽐,Xml和Json的基本概念就不说了。
Hessian:Hessian是⼀个轻量级的remoting onhttp⼯具,提供了RMI的功能,采⽤的是⼆进制RPC协议,内置了序列化功能。
Protocol Buffers:google的⼀种数据交换的格式,它独⽴于语⾔,由于它是⼀种⼆进制的格式,⽐使⽤ xml 进⾏数据交换快许多,可以把它⽤于分布式应⽤之间的数据通信或者异构环境下的数据交换。作为⼀种效率和兼容性都很优秀的⼆进制数据传输格式,可以⽤于诸如⽹络传输、配置⽂件、数据存储等诸多领域。Google提供了Java、C++、Python的实现,现在⽹上也已经有了c#等语⾔的实现。
序列化和反序列化
XML:使⽤.Net⾃带的XmlSerializer。
Json:使⽤的是ServiceStack.Text,性能⾼于Newtonsoft.Json,但是速度最快的应该是fastJSON。
Hessian:使⽤的是HessianCSharp库, 从nuget上下载。
Protocol Buffers:使⽤的是protobuf-net,从nuget上下载。
下列是测试使⽤的实体。
[ProtoContract]
public class Studentpython处理xml文件
{
[ProtoMember(1, IsRequired = true)]
public int Id { get; set; }
[ProtoMember(2, IsRequired = true)]
public string Name { get; set; }
[ProtoMember(3, IsRequired = true)]
public DateTime Time { get; set; }
[ProtoMember(4, IsRequired = true)]
public List<string> Books { get; set; }
}
Student student = new Student()
{
Id = 1,
Name = "Alan",
Time = DateTime.Now,
Books = new List<string>() { "语⽂", "数学" }
};
View Code
测试机器使⽤的i7HQ 2.6HZ处理器。
下⾯是测试的结果
序列化
反序列化
序列化后字节长度
先说序列化,这⾥分别⽤100次,1000次,10000次和100000次进⾏了测试,纵坐标是完成时间,单位是毫秒,可以看到在进⾏10000次以内的测试时,4种序列化的耗时都是很⼩的,都在200毫秒内,10000次以后,到100000次,都开始增长,最差的是Xml,最好的是Protocol Buffers,但是在10000次内的时
候,Hessian要优于Protocol Buffers。
对于反序列化10000次内的差别都不⼤,但是在10000次的时候我们已经可以看出Hessian⽐较耗时,到了100000次,Hessian直接超过了 Xml,让我⼀直以为是我的代码出现了问题,表现最好的依然是Protocol Buffers。
序列化后的字节长度,Xml最长这个可以理解,因为⽂件中包含很多的结尾标签(</Name>),Protocol Buffers依然是最好。
根据上⾯的图,我们⼏乎可以很快得出结论:Protocol Buffers是最好的,但是我觉得我们还要从以下⼏个⽅⾯综合评估:
1. 可读性:Xml和Json序列化后都是⽂本,可读性都⾮常好,⽐如两个系统要交换数据,如果中间出了差错,我们可以很⽅便的查看交换的数据,甚⾄模拟数据去测试;Hessian和Protocol Buffers都是⼆进制的,序列化后内容都是不可读的,这会对系统的排错造成⼀定的影响。
2. 通⽤性:Xml和Json已经是⽼牌的数据交换格式了,⼀般系统之间数据交换也就这两种格式;Hessian和Protocol Buffers都⽐较冷门,⽤的⽐较少。
3. 便捷性:Hessian其实是⼀个完整的RPC框架,在服务端定义接⼝并实现接⼝,将接⼝复制到客户
端经过少量的编码,我们就可以在像调⽤本地⽅法那样去调⽤服务端,这种实现⽅式是其他三个⼯具不具有的,并且性能也不差。
后记
1. 以上的测试结果会因为机器配置的差别⽽结果略有差别。
2. 使⽤了单线程的测试,在多线程下还没有测试。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论