.NET Core protobuf-net、MessagePack、Json.NET序列化/反序列化性能测试

测试代码Zonciu/SerializationTest.cs

源自neuecc/ZeroFormatterBenchmark.cs

NuGet包及其版本

mgravell/protobuf-net 2.3.2(非官方实现,官方无.NET实现)
msgpack/msgpack-cli 1.0.0-beta2(官方实现)
neuecc/MessagePack 1.7.2(非官方实现)
JamesNK/Newtonsoft.Json 10.0.3

兼容性

protobuf-net

  • 不支持无Contract Attribute的模型
  • 自带Attribute
  • 支持System.Runtime.Serialization Attribute

MsgPack-Cli

  • 支持无Contract Attribute的模型
  • 自带Attribute
  • 支持System.Runtime.Serialization Attribute

MessagePack

  • 支持无Contract Attribute的模型
  • 自带Attribute
  • 支持System.Runtime.Serialization Attribute

Newtonsoft.Json

  • 支持无Contract Attribute的模型
  • 自带Attribute
  • 支持System.Runtime.Serialization Attribute

测试结果

mgravell/protobuf-net
      Serialize   4.195 ms
    Deserialize   10.0423 ms
    ReSerialize   4.1817 ms
 Size of Binary 36.00 B
mgravell/protobuf-net
      Serialize   4.172 ms
    Deserialize   10.0139 ms
    ReSerialize   4.1776 ms
 Size of Binary 36.00 B
mgravell/protobuf-net
      Serialize   4.4121 ms
    Deserialize   10.2684 ms
    ReSerialize   4.2439 ms
 Size of Binary 36.00 B

Official MsgPack-Cli
      Serialize   6.9675 ms
    Deserialize   14.4727 ms
    ReSerialize   6.7491 ms
 Size of Binary 36.00 B
Official MsgPack-Cli
      Serialize   6.7087 ms
    Deserialize   14.4588 ms
    ReSerialize   6.9524 ms
 Size of Binary 36.00 B
Official MsgPack-Cli
      Serialize   6.7676 ms
    Deserialize   14.5932 ms
    ReSerialize   6.9552 ms
 Size of Binary 36.00 B

neuecc/MessagePack-CSharp
      Serialize   3.703 ms
    Deserialize   4.3366 ms
    ReSerialize   3.6741 ms
 Size of Binary 32.00 B
neuecc/MessagePack-CSharp
      Serialize   3.7056 ms
    Deserialize   4.6376 ms
    ReSerialize   3.6672 ms
 Size of Binary 32.00 B
neuecc/MessagePack-CSharp
      Serialize   3.6871 ms
    Deserialize   4.2972 ms
    ReSerialize   3.6756 ms
 Size of Binary 32.00 B

Newtonsoft.Json
      Serialize   17.5037 ms
    Deserialize   33.8181 ms
    ReSerialize   21.2306 ms
 Size of Binary 90.00 B
Newtonsoft.Json
      Serialize   18.4885 ms
    Deserialize   35.5003 ms
    ReSerialize   17.4223 ms
 Size of Binary 90.00 B
Newtonsoft.Json
      Serialize   18.1058 ms
    Deserialize   32.0834 ms
    ReSerialize   23.5259 ms
 Size of Binary 90.00 B

mgravell/protobuf-net
      Serialize   6546.5884 ms
    Deserialize   11488.7313 ms
    ReSerialize   6709.2795 ms
 Size of Binary 37.11 KB
mgravell/protobuf-net
      Serialize   6564.3259 ms
    Deserialize   11431.9974 ms
    ReSerialize   6679.0116 ms
 Size of Binary 37.11 KB
mgravell/protobuf-net
      Serialize   6561.8096 ms
    Deserialize   11476.1318 ms
    ReSerialize   6668.9106 ms
 Size of Binary 37.11 KB

Official MsgPack-Cli
      Serialize   5617.6389 ms
    Deserialize   14581.9512 ms
    ReSerialize   5578.6621 ms
 Size of Binary 38.82 KB
Official MsgPack-Cli
      Serialize   5590.4476 ms
    Deserialize   14763.014 ms
    ReSerialize   5533.6327 ms
 Size of Binary 38.82 KB
Official MsgPack-Cli
      Serialize   5607.3836 ms
    Deserialize   14615.2356 ms
    ReSerialize   5585.7651 ms
 Size of Binary 38.82 KB

neuecc/MessagePack-CSharp
      Serialize   3065.3312 ms
    Deserialize   4371.5859 ms
    ReSerialize   3062.9087 ms
 Size of Binary 32.83 KB
neuecc/MessagePack-CSharp
      Serialize   3116.9423 ms
    Deserialize   4392.1279 ms
    ReSerialize   3061.0422 ms
 Size of Binary 32.83 KB
neuecc/MessagePack-CSharp
      Serialize   3080.5855 ms
    Deserialize   4385.2026 ms
    ReSerialize   3054.3972 ms
 Size of Binary 32.83 KB

Newtonsoft.Json
      Serialize   13303.1545 ms
    Deserialize   24219.7497 ms
    ReSerialize   13346.126 ms
 Size of Binary 86.81 KB
Newtonsoft.Json
      Serialize   13362.7296 ms
    Deserialize   24238.1881 ms
    ReSerialize   13332.8785 ms
 Size of Binary 86.81 KB
Newtonsoft.Json
      Serialize   13399.7856 ms
    Deserialize   24197.9922 ms
    ReSerialize   13325.7399 ms
 Size of Binary 86.81 KB

neuecc/MessagePack-CSharp without Attribute
      Serialize   3.9342 ms
    Deserialize   4.9817 ms
    ReSerialize   3.9434 ms
 Size of Binary 65.00 B
neuecc/MessagePack-CSharp without Attribute
      Serialize   3.9854 ms
    Deserialize   4.9978 ms
    ReSerialize   3.9498 ms
 Size of Binary 65.00 B
neuecc/MessagePack-CSharp without Attribute
      Serialize   3.9393 ms
    Deserialize   5.1384 ms
    ReSerialize   3.9293 ms
 Size of Binary 65.00 B

neuecc/MessagePack-CSharp without Attribute
      Serialize   3968.4564 ms
    Deserialize   4912.953 ms
    ReSerialize   4082.8229 ms
 Size of Binary 65.06 KB
neuecc/MessagePack-CSharp without Attribute
      Serialize   3967.5422 ms
    Deserialize   4912.2183 ms
    ReSerialize   4059.2614 ms
 Size of Binary 65.06 KB
neuecc/MessagePack-CSharp without Attribute
      Serialize   3952.6747 ms
    Deserialize   4974.3738 ms
    ReSerialize   4066.7528 ms
 Size of Binary 65.06 KB

单对象序列化、反序列化、再序列化时间

多对象数组序列化、反序列化、再序列化时间

单对象序列化后数据大小

多对象数组序列化后数据大小

结论

neuecc/MessagePack表现最优,官方MsgPack-Cli表现比较差,Protobuf不支持无Contract Attribute模型,意味着需要侵入模型。

使用MessagePack,模型添加Contract Attribute并添加int型Order,比不添加Attribute或添加string型key快一点点,序列化后数据量明显减少,原因是不使用Attribute或使用string型Attribute key时,是以成员名称或key string作为索引,反之使用int型索引。

时间: 2024-08-13 20:54:54

.NET Core protobuf-net、MessagePack、Json.NET序列化/反序列化性能测试的相关文章

Asp.Net Core中使用Newtonsoft.Json进行序列化处理解决返回值首字母小写

一.Newtonsoft.Json仅 依赖.Net Standard所以支持.Net Framework也支持.Net Core 二.使用实例 Jquery 的ajax get请求 $('#btnOne').click(function () { //使用ajax get请求json 数据 $.get('@Url.Action("DataOne")', {}, function (data) { console.info(data); console.info(data[0].menu

Net Core中使用Newtonsoft.Json进行序列化保持原有大小写

JsonSerializerSettings settings = new JsonSerializerSettings(); //EF Core中默认为驼峰样式序列化处理key //settings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //使用默认方式,不更改元数据的key的大小写 settings.ContractResolver = new DefaultContractResolver(); r

.net json数据序列化/反序列化

/// <summary> /// JSON序列化 /// </summary> public static string JsonSerializer<T>(T t) { try { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(); ser.WriteObject(ms, t); string

基于.NET CORE微服务框架 -谈谈surging 的messagepack、protobuffer、json.net 序列化

1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输. 在这里需要感谢白纸无字Zonciu,新增了messagepack序列化,让surging 性能上跨了一大步.此篇文章我们来谈谈messagepack.protobuffer.json.net ,并且性能做下对比 开源地址:https://github.com/dotnetcore/surging

在Asp.Net Core 3.0中如何使用 Newtonsoft.Json 库序列化数据

在.Net Core 3.0中 内置了一套Json序列化/反序列化方案,默认可以不再依赖,不再支持   Newtonsoft.Json. 但是.NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 使用方法不一致,对于3.0以前版本升级有限制.如果前端代码以固定更没法用了. 在Asp.Net Core 3.0中如何使用  Newtonsoft.Json 库序列化数据 官方给出了兼容处理方案,操作步骤如下: 1.引用Microsoft.AspNetCore

ASP.NET 中JSON 的序列化和反序列化

JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理. 一.JSON简介: JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大括号''{}'

mvc 使用Newtonsoft.Json进行序列化json数据

mvc 使用Newtonsoft.Json进行序列化json数据 JsonResult  使用js 序列号化,先集成扩展.使用newtonsoft http://blog.csdn.net/zhangyuanwei88/article/details/38556689

ASP.NET MVC 网站开发总结(六)——简谈Json的序列化与反序列化

首先,先简单的谈一下什么是序列化与反序列化,序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化(Deserialization)对象的状态,重新创建该对象. 一般我们把Json的序列化与反序列化用在哪些地方呢?对于网站开发来说,一般我们会用Json来进行前台和后台的数据传递(常与Ajax一起使用),而这个过程就涉及到了Json的序列化与反序列化. 那么我们就来简单看

JAVA与JSON的序列化、反序列化

package com.linkage.app.memcache; import java.util.HashMap;import java.util.Map.Entry; import net.sf.ezmorph.Morpher;import net.sf.ezmorph.MorpherRegistry;import net.sf.ezmorph.bean.BeanMorpher;import net.sf.json.JSONObject;import net.sf.json.util.JS