.NET序列化工具Jil、Json.NET和Protobuf的简单测评
2016-08-23 16:24
477 查看
前一段时间逛园子的时候发现有人比较了Jil、Json.NET和Protobuf的性能,一时好奇,也做了个测试,这里记录下来,以供查阅。
Jil
Jil是一款高性能的Json序列化工具,大名鼎鼎的StackOverflow也在用它,不少园友说他的性能比Json.NET更快,由于我本身机器环境的原因未能使用最新版,这里使用的是2.6.0版本。
Json.NET
Json.NET(Newtonsoft.Json)也是一款常用的Json序列化工具,我现在的公司就在使用它,这里使用版本是9.0.1。
Protobuf-NET
Protobuf是谷歌出品的数据序列化工具,优点是体积小速度快,但是它并不支持.NET,目前使用的是Java的移植版,而且它的数据格式不能被JS解析,个人认为不太适合作为公共的数据传输规范,目前使用的版本是2.0.0.668,使用起来也比前面两个麻烦,如PostInfo中还要加上ProtoContract和ProtoMember特性。这里顺便提一下,在我使用的过程中发现数据量过大或者使用UTF-8格式对数据进行操作时,Protobuf均会报出异常,可能是我本人使用的问题,也可能是新版本中已经解决的这个问题。
反序列化时间比较:Protobuf(6ms)>Json.NET(24ms)>Jil(58ms)
通过执行结果可以看到Protobuf果然是一骑千里绝尘去,甩了其他工具好几条街,可以考虑一下用它来传输和存储日志信息,但Josn.NET的性能和Jil的性能并不如园友们测试的那样Jil的性能要高于Json.NET,我尝试将数据量增加,结果依旧如此,预估有可能跟我引用的版本存在一些关系,但因为环境所限,我也就不折腾了,好了就到这里了。
前期准备
依赖类库的话,可以通过Nuget在公共组件库总下载,这里不做赘述。我在数据库中生成了一些PostInfo数据,取100条进行测试:[ProtoContract] public class PostInfo { [ProtoMember(1)] public long P_ID { get; set; } [ProtoMember(2)] public string P_Title { get; set; } [ProtoMember(3)] public string P_Content { get; set; } [ProtoMember(4)] public string P_CreateTime { get; set; } }
Jil
Jil是一款高性能的Json序列化工具,大名鼎鼎的StackOverflow也在用它,不少园友说他的性能比Json.NET更快,由于我本身机器环境的原因未能使用最新版,这里使用的是2.6.0版本。
//序列化 JSON.Serialize<List<PostInfo>>(infos); //反序列化 JSON.Deserialize<List<PostInfo>>(jilSerialize);
Json.NET
Json.NET(Newtonsoft.Json)也是一款常用的Json序列化工具,我现在的公司就在使用它,这里使用版本是9.0.1。
//序列化 JsonConvert.SerializeObject(infos); //反序列化 JsonConvert.DeserializeObject<List<PostInfo>>(newtonSerialize);
Protobuf-NET
Protobuf是谷歌出品的数据序列化工具,优点是体积小速度快,但是它并不支持.NET,目前使用的是Java的移植版,而且它的数据格式不能被JS解析,个人认为不太适合作为公共的数据传输规范,目前使用的版本是2.0.0.668,使用起来也比前面两个麻烦,如PostInfo中还要加上ProtoContract和ProtoMember特性。这里顺便提一下,在我使用的过程中发现数据量过大或者使用UTF-8格式对数据进行操作时,Protobuf均会报出异常,可能是我本人使用的问题,也可能是新版本中已经解决的这个问题。
//序列化 using (MemoryStream ms = new MemoryStream()) { Serializer.Serialize<List<PostInfo>>(ms, infos); protoSerialize = Encoding.Unicode.GetString(ms.ToArray()); } //反序列化 using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(protoSerialize))) { var protobuf_infos = Serializer.Deserialize<List<PostInfo>>(ms); }
执行结果
序列化时间比较:Protobuf(39ms)>Json.NET(84ms)>Jil(168ms)反序列化时间比较:Protobuf(6ms)>Json.NET(24ms)>Jil(58ms)
通过执行结果可以看到Protobuf果然是一骑千里绝尘去,甩了其他工具好几条街,可以考虑一下用它来传输和存储日志信息,但Josn.NET的性能和Jil的性能并不如园友们测试的那样Jil的性能要高于Json.NET,我尝试将数据量增加,结果依旧如此,预估有可能跟我引用的版本存在一些关系,但因为环境所限,我也就不折腾了,好了就到这里了。
相关文章推荐
- 最快的序列化组件protobuf的.net版本protobuf.net
- .net序列化 - Newtonsoft(Json.Net)简单应用
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- ASP.NET 中JSON “.NET研究”的序列化和反序列化
- 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
- 序列化悍将Protobuf-Net
- 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- 序列化协议(protobuf,xstream,jackjson,jdk,hessian)对比
- 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
- .net json序列化组件Json.NET
- 序列化悍将Protobuf-Net,入门动手实录
- 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
- 高效的序列化组件 Protobuf-net
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
- c#序列化与反序列化通用方法, 使用protobuf-net实现
- 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
- 高性能序列化工具Google Protobuf的使用
- 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比