首页 > 其他分享 >MessagePack 和System.Text.Json 序列号 反序列化对比

MessagePack 和System.Text.Json 序列号 反序列化对比

时间:2022-11-14 09:25:57浏览次数:53  
标签:set string get Text MessagePack 序列号 序列化 public MyProperty

本博客将测试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的分享

 

出处:https://www.cnblogs.com/hejiale010426/p/16887802.html

标签:set,string,get,Text,MessagePack,序列号,序列化,public,MyProperty
From: https://www.cnblogs.com/mq0036/p/16887977.html

相关文章

  • Java 序列化与反序列化
    (目录)一、说明序列化与反序列化是什么序列化:将Java对象表示为一个字节序列,存储对象数据到文件中,可用于网络传输反序列化:从文件中读取序列化对象,对它进行反序列化,恢......
  • C#通过其他类更新textbox控件
    应用需求:经常我们会碰到这样的情况,我们需要在其他C#类里面调用控件并修改其中的某个属性。解决办法:1.在控件类中添加静态变量:publicstaticForm1form;12.然后在其构造......
  • Re:从零开始教你使用 Sublime Text
    目录Re:从零开始教你使用SublimeText0.前言0-0.关于我为什么要写这篇文章0-1.关于这篇文章会讲什么0-2.适用人群0-4.其他0-5.无用的统计1.安装和基础功能介绍1-0.下载1-1......
  • Java安全之Mojarra JSF反序列化
    Java安全之MojarraJSF反序列化AboutJSFJavaServerFaces,新一代的JavaWeb应用技术标准,吸收了很多JavaServlet以及其他的Web应用框架的特性。JSF为Web应用开发定义了一......
  • 第6章Spring与Web-使用 Spring 的监听器 ContextLoaderListener使得将spring容器对象
    第6章Spring与Web在Web项目中使用Spring框架,首先要解决在web层(这里指Servlet)中获取到Spring容器的问题。只要在web层获取到了Spring容器,便可从容器中获取到......
  • OpenGL ES EAGLContext 和 EGLContext
    目录一.前言1.OpenGL2.OpenGLES3.平台差异二.EAGLContext和EGLContext简介1.EGLContext2.EAGLContext三.EGL绘制流程简介四.EAGL绘制五.猜你喜......
  • 学习笔记-java代码审计-反序列化
    Java代码审计-反序列化0x00漏洞挖掘业务代码简单来说,找readObject/readUnshared就好了protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresp......
  • Re:从零开始教你使用 Sublime Text
    目录Re:从零开始教你使用SublimeText0.前言0-0.关于我为什么要写这篇文章0-1.关于这篇文章会讲什么0-2.适用人群0-3.其他1.安装和基础功能介绍1-0.下载1-1.各部分功能介......
  • 【Java Web】项目通用返回模块ServerResponse:枚举code状态码、泛型返回值、序列化注解
    一、枚举类编写ResponseCodepackagecom.boulderaitech.common;/***编写枚举类的步骤*(1)编写所需的变量*(2)编写枚举类构造方法*(3)编写枚举的值,调用构造方法,使......
  • OpenGL ES EGL eglQueryContext
    目录一.EGL前言二.EGL绘制流程简介三.eglQueryContext函数简介四.eglQueryContext使用四.猜你喜欢零基础OpenGLES学习路线推荐:OpenGLES学习目录>>......