.NET序列化工具Jil、Json.NET和Protobuf的简单测评
前一段时间逛园子的时候发现有人比较了Jil、Json.NET和Protobuf的性能,一时好奇,也做了个测试,这里记录下来,以供查阅。
前期准备
依赖类库的话,可以通过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,我尝试将数据量增加,结果依旧如此,预估有可能跟我引用的版本存在一些关系,但因为环境所限,我也就不折腾了,好了就到这里了。
转载于:https://www.cnblogs.com/krockey/p/5799898.html
.NET序列化工具Jil、Json.NET和Protobuf的简单测评相关推荐
- 迄今为止最快的 JSON 序列化工具 Jil
2019独角兽企业重金招聘Python工程师标准>>> 迄今为止最快的 JSON 序列化工具 Jil https://github.com/kevin-montrose/Jil 转载 ...
- protostuff java_Protostuff一键序列化工具、Protobuf JAVA实现
前言:由于搜集网络,发现Protostuff相关内容较少,故此发布这篇文章 1. 何为序列化 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象 ...
- 解决Python自带的json序列化工具不能序列化datetime类型数据问题
解决Python自带的json序列化工具不能序列化datetime类型数据问题 参考文章: (1)解决Python自带的json序列化工具不能序列化datetime类型数据问题 (2)https:// ...
- 【Flutter】JSON 模型转换 ( JSON 序列化工具 | JSON 手动序列化 | 根据 JSON 编写 Dart 模型类 | 在线自动根据 JSON 转换 Dart 类 )
文章目录 一.JSON 序列化工具 二.JSON 手动序列化 三.根据 JSON 编写 Dart 模型类 四.在线自动转换 五.相关资源 一.JSON 序列化工具 JSON 格式比较简单的话 , 使用 ...
- Google FlatBuffers——开源、跨平台的新一代序列化工具
>>> Google FlatBuffers--开源.跨平台的新一代序列化工具 转载自:http://www.cnblogs.com/lizhenghn/p/3854244.html ...
- 一篇博客教会你写序列化工具
文章目录 什么是序列化? 序列化格式 JSON序列化 精简序列化数据 总结 源码 什么是序列化? 总所周知,在Java语言中,所有的数据都是以对象的形式存在Java堆中. 但是Java对象如果要存储在 ...
- jackson、fastjson、kryo、protostuff等序列化工具性能对比
简介 实际项目中,我们经常需要使用序列化工具来存储和传输对象.目前用得比较多的序列化工具有:jackson.fastjson.kryo.protostuff.fst 等,本文将简单对比这几款工具序列化 ...
- Java序列化工具的对比
在Java开发工具当中,Java序列化工具是比较常用的,而且种类也有不少,下面小编就来做个对比: 1.Java序列化工具的技术原理对比 Binary Formats & language-sp ...
- 自定义Redis序列化工具
为什么用户需要自己创建一个redis配置类? SpringBoot提供了对Redis的自动配置功能,在RedisAutoConfiguration类中默认为我们配置了客户端连接(Lettuce和Jed ...
最新文章
- 并发编程-22J.U.C组件拓展之Fork/Join框架
- 雅思8分大神叫你如何学习口语
- mysql rename语法错误_为什么现在MySQL无法重命名数据库?
- epoll 系列函数简介、与select、poll 的区别
- IDEA 更换主题样式
- Excel查询两列值的差异 -- VLOOPUP
- 基于微信小程序的每日签到打卡系统ssm框架
- 小型餐厅管理系统 java_小型餐饮管理系统的设计与实现(JSP,MySQL)
- 原神可莉、七七、迪奥娜、早柚、宵宫...模型下载(带骨骼贴图)
- 全球2%高智商天才必测脑力题!却只有1%的人,能在5分钟内全部做对!
- 爬取猫眼评分前100的电影
- 微信小程序开发实战3 使用Go语言开发Web服务
- 使用docker创建属于你的ChatGPT
- 基于SpringBoot+jpa+Erupt的出入登记签到打卡系统
- 触摸屏式温控器参数笔记(五)(di设定)
- java后端解决重复提交问题
- Js 几种刷新页面最快的方法
- tomcat加载(挂载)应用的几种方式
- 东芝笔记本 PORTEGE M400 声卡驱动
- linux服务器实训心得体会,linux实训心得体会 linux实训总结与体会