MessagePack 和System.Text.Json 序列号 反序列化对比
本博客将测试MessagePack 和System.Text.Json 序列号 反序列化性能
项目文件:

Program.cs代码:
using BenchmarkDotNet.Running;
using Demo;
var summary = BenchmarkRunner.Run<SerializeTest>();
SerializeTest.cs代码:
using BenchmarkDotNet.Attributes;
using MessagePack;
using System.Text.Json;
namespace Demo
{
    [MemoryDiagnoser, RankColumn, MaxColumn,MinColumn]
    public class SerializeTest
    {
        public List<TestModule> TestDatas = new();
        public byte[] Pack;
        public byte[] Json;
        public SerializeTest()
        {
            for (int i = 0; i < 3000; i++)
            {
                var d = new TestModule(Guid.NewGuid(), Guid.NewGuid().ToString("N") + i);
                d.i = i;
                TestDatas.Add(d);
            }
            Pack = MessagePackSerializer.Serialize(TestDatas, MessagePack.Resolvers.ContractlessStandardResolver.Options);
            Json = JsonSerializer.SerializeToUtf8Bytes(TestDatas);
        }
        [Benchmark]
        public byte[] GetMessagePackByte()
        {
            return MessagePackSerializer.Serialize(TestDatas, MessagePack.Resolvers.ContractlessStandardResolver.Options);
        }
        [Benchmark]
        public byte[] TextJsonByte()
        {
            return JsonSerializer.SerializeToUtf8Bytes(TestDatas);
        }
        [Benchmark]
        public List<TestModule> GetMessagePack()
        {
            return MessagePackSerializer.Deserialize<List<TestModule>>(Pack, MessagePack.Resolvers.ContractlessStandardResolver.Options);
        }
        [Benchmark]
        public List<TestModule>? TextJson()
        {
            return JsonSerializer.Deserialize<List<TestModule>>(Json);
        }
        public class TestModule
        {
            public TestModule(Guid id, string? value)
            {
                Id = id;
                Value = value;
            }
            public Guid Id { get; set; }
            public int i { get; set; }
            public string? Value { get; set; }
            public string MyProperty { get; set; } = "MyProperty";
            public string MyProperty1 { get; set; } = "MyProperty";
            public string MyProperty2 { get; set; } = "MyProperty";
            public string MyProperty3 { get; set; } = "MyProperty";
            public string MyProperty4 { get; set; } = "MyProperty";
            public string MyProperty5 { get; set; } = "MyProperty";
            public string MyProperty6 { get; set; } = "MyProperty";
            public string MyProperty7 { get; set; } = "MyProperty";
            public string MyProperty8 { get; set; } = "MyProperty";
            public string MyProperty9 { get; set; } = "MyProperty";
            public string MyProperty10 { get; set; } = "MyProperty";
        }
    }
}
然后我们将使用基准测试开始我们的性能测试:

然后测试结束:

我们看到我们的MessagePack的性能在序列号Byte[]的表现对比TextJson上不光是性能比TextJson的更快,内存占用也更小
然后是反序列化对象 MessagePack对比TextJson 性能和内存占用都更强
在使用MessagePack的前提上我配置了MessagePack的配置 MessagePack.Resolvers.ContractlessStandardResolver.Options
如果不加 MessagePack.Resolvers.ContractlessStandardResolver.Options 性能可能并不比Json更快更好 启用了配置以后模型不需要添加特性 并且性能更快
在需要更快性能的场景MessagePack更适合 并且传输的体积更小,所以非常推荐在需要性能的场景下使用MessagePack
顺便我还测试过嵌套序列号和反序列化MessagePack的表现还是比Json的更强
技术分享群:737776595
来自 token的分享
MessagePack 和System.Text.Json 序列号 反序列化对比的更多相关文章
- [译]试用新的System.Text.Json API
		
译注 可能有的小伙伴已经知道了,在.NET Core 3.0中微软加入了对JSON的内置支持. 一直以来.NET开发者们已经习惯使用Json.NET这个强大的库来处理JSON. 那么.NET为什么要增 ...
 - 使用System.Text.Json处理Json文档以及部分坑
		
System.Text.Json处理Json文档需要用到JsonDocument,JsonElement,JsonProperty. JsonDocument就是一个表示Json文档的东西,JsonE ...
 - 在.Net Core 3.0中尝试新的System.Text.Json API
		
.NET Core 3.0提供了一个名为System.Text.Json的全新命名空间,它支持reader/writer,文档对象模型(DOM)和序列化程序.在此博客文章中,我将介绍它如何工作以及如何 ...
 - .NET Core 内置的 System.Text.Json 使用注意
		
System.Text.Json 是 .NET Core 3.0 新引入的高性能 json 解析.序列化.反序列化类库,武功高强,但毕竟初入江湖,炉火还没纯青,使用时需要注意,以下是我们在实现使用中遇 ...
 - .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法
		
行为不一致 .NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事... 对我来说, 很多或大或小的项目能少 ...
 - System.Text.Json 序列化对所有 JSON 属性名称使用 camel 大小写
		
asp.net core3.x 新增的序列号接口System.Text.Json 序列化时,如果要对所有 JSON 属性名称使用 camel 大小写 将 JsonSerializerOptions.P ...
 - [.Net Core 3.0+/.Net 5] System.Text.Json中时间格式化
		
简介 .Net Core 3.0开始全新推出了一个名为System.Text.Json的Json解析库,用于序列化和反序列化Json,此库的设计是为了取代Json.Net(Newtonsoft.Jso ...
 - c# System.Text.Json 精讲
		
本文内容来自我写的开源电子书<WoW C#>,现在正在编写中,可以去WOW-Csharp/学习路径总结.md at master · sogeisetsu/WOW-Csharp (gith ...
 - 【译】System.Text.Json 的下一步是什么
		
.NET 5.0 最近发布了,并带来了许多新特性和性能改进.System.Text.Json 也不例外.我们改进了性能和可靠性,并使熟悉 Newtonsoft.Json 的人更容易采用它.在这篇文章中 ...
 
随机推荐
- Mybatis的ResultMap与limit分页查询
			
ResultMap主要解决的是:属性名和字段不一致 如果在pojo中设置的是一个名字,在数据库上又是另一个名字,那么查询出来的结果或者其他操作的结果就为null. //在pojo中 private S ...
 - Docker0网络及原理探究
			
个人观点:Docker网络通信在容器编排.集群部署中具有举足轻重的地位,(玩docker不懂docker0那就......玩不透哇)本篇分析Docker网络,并通过启动几个容器来探究Docker网络及 ...
 - C# winfrom ListView控件实现自由设置每一行字体及背景色等
			
背景:公司经常会需要将日志信息,输出到一个对话框中显示出来.之前一直采用的listbox控件,操作简单,使用方便,但是遗憾的是,不能自由控制每一行的状态. 于是想了如下几个方案: (1)重绘listb ...
 - Get请求使用请求体传递参数会报400异常的问题
			
问题描述: 前端使用Get请求并且使用请求体传递参数,后端使用@RequestBody注解封装参数,这时会出现400的异常信息. 解决方法: 1.Get请求不要使用请求体,使用请求体的话用POST请求 ...
 - KingbaseES blob 类型数据导入导出
			
KingbaseES兼容了oracle的blob数据类型.通常是用来保存二进制形式的大数据,也可以用来保存其他类型的数据. 下面来验证一下各种数据存储在数据库中形式. 建表 create table ...
 - Java 函数式编程
			
由 JS 转 Java,写惯了 React,习惯了函数式,因此转 Java 时也是先学函数式. 语法糖「Syntactic Sugar」 起初,Java 的函数式看起来是匿名类的一个语法糖. Stre ...
 - C#winform中使用Cef的ChromiumWebBrowser内嵌谷歌内核,调用前端js方法
			
1.在winform中调用js方法: --调js中的方法无 入参形式 webBrowser1.ExecuteJavascript("logout()"); --调js中的方法给js ...
 - 《Java基础——数组的定义与使用》
			
Java基础--数组的定义与使用 一. 一维数组: 格式一: 数组类型 数组变量[]=new 数据类型[长度]; //需要后续赋值,且后续赋值时只能为单个元素赋值. 或 数组类型 数组变量 ...
 - MinIO Client完全指南
			
官方文档地址:http://docs.minio.org.cn/docs/master/minio-client-complete-guide 下载,添加云存储服务参考这篇文章:https://www ...
 - prometheus和granfana企业级监控实战v5
			
文件地址:https://files.cnblogs.com/files/sanduzxcvbnm/prometheus和granfana企业级监控实战v5.pdf