前一段时间逛园子的时候发现有人比较了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的简单测评相关推荐

  1. 迄今为止最快的 JSON 序列化工具 Jil

    2019独角兽企业重金招聘Python工程师标准>>> 迄今为止最快的 JSON 序列化工具 Jil https://github.com/kevin-montrose/Jil 转载 ...

  2. protostuff java_Protostuff一键序列化工具、Protobuf JAVA实现

    前言:由于搜集网络,发现Protostuff相关内容较少,故此发布这篇文章 1. 何为序列化 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象 ...

  3. 解决Python自带的json序列化工具不能序列化datetime类型数据问题

    解决Python自带的json序列化工具不能序列化datetime类型数据问题 参考文章: (1)解决Python自带的json序列化工具不能序列化datetime类型数据问题 (2)https:// ...

  4. 【Flutter】JSON 模型转换 ( JSON 序列化工具 | JSON 手动序列化 | 根据 JSON 编写 Dart 模型类 | 在线自动根据 JSON 转换 Dart 类 )

    文章目录 一.JSON 序列化工具 二.JSON 手动序列化 三.根据 JSON 编写 Dart 模型类 四.在线自动转换 五.相关资源 一.JSON 序列化工具 JSON 格式比较简单的话 , 使用 ...

  5. Google FlatBuffers——开源、跨平台的新一代序列化工具

    >>> Google FlatBuffers--开源.跨平台的新一代序列化工具 转载自:http://www.cnblogs.com/lizhenghn/p/3854244.html ...

  6. 一篇博客教会你写序列化工具

    文章目录 什么是序列化? 序列化格式 JSON序列化 精简序列化数据 总结 源码 什么是序列化? 总所周知,在Java语言中,所有的数据都是以对象的形式存在Java堆中. 但是Java对象如果要存储在 ...

  7. jackson、fastjson、kryo、protostuff等序列化工具性能对比

    简介 实际项目中,我们经常需要使用序列化工具来存储和传输对象.目前用得比较多的序列化工具有:jackson.fastjson.kryo.protostuff.fst 等,本文将简单对比这几款工具序列化 ...

  8. Java序列化工具的对比

    在Java开发工具当中,Java序列化工具是比较常用的,而且种类也有不少,下面小编就来做个对比: 1.Java序列化工具的技术原理对比 Binary Formats & language-sp ...

  9. 自定义Redis序列化工具

    为什么用户需要自己创建一个redis配置类? SpringBoot提供了对Redis的自动配置功能,在RedisAutoConfiguration类中默认为我们配置了客户端连接(Lettuce和Jed ...

最新文章

  1. 并发编程-22J.U.C组件拓展之Fork/Join框架
  2. 雅思8分大神叫你如何学习口语
  3. mysql rename语法错误_为什么现在MySQL无法重命名数据库?
  4. epoll 系列函数简介、与select、poll 的区别
  5. IDEA 更换主题样式
  6. Excel查询两列值的差异 -- VLOOPUP
  7. 基于微信小程序的每日签到打卡系统ssm框架
  8. 小型餐厅管理系统 java_小型餐饮管理系统的设计与实现(JSP,MySQL)
  9. 原神可莉、七七、迪奥娜、早柚、宵宫...模型下载(带骨骼贴图)
  10. 全球2%高智商天才必测脑力题!却只有1%的人,能在5分钟内全部做对!
  11. 爬取猫眼评分前100的电影
  12. 微信小程序开发实战3 使用Go语言开发Web服务
  13. 使用docker创建属于你的ChatGPT
  14. 基于SpringBoot+jpa+Erupt的出入登记签到打卡系统
  15. 触摸屏式温控器参数笔记(五)(di设定)
  16. java后端解决重复提交问题
  17. Js 几种刷新页面最快的方法
  18. tomcat加载(挂载)应用的几种方式
  19. 东芝笔记本 PORTEGE M400 声卡驱动
  20. linux服务器实训心得体会,linux实训心得体会 linux实训总结与体会

热门文章

  1. 涨握在线:美封堵华为5G,遭印企驳斥
  2. 一些Chrome的地址栏命令
  3. 清除Windows安全中心保护历史记录方法
  4. 计算机少年宫活动记录表,小学乡村少年宫计算机兴趣小组活动记录表.docx
  5. wamp 不起启动一直是黄的
  6. java中怎么定义true或false_java 中的true、false、null有何不同
  7. 容器服kubernetes_10个Kubernetes发行版引领了容器革命
  8. 【书签】web自动化测试之selenium
  9. 基于漏磁的电机霍尔调试
  10. 计算机音乐里面的歌怎么关掉,电脑qq音乐怎么退出登录