• 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的分享

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

  • 相关阅读:
    3.不同类型变量存取
    2.Scanner的应用
    helloworld
    针对搜狗网址导航评论
    第二阶段第三次站立会议
    第二阶段第二次站立会议
    软件工程概论学习进度条05
    人月神话阅读笔记02
    第二阶段第一次站立会议
    第八次站立会议
  • 原文地址:https://www.cnblogs.com/mq0036/p/16887977.html
Copyright © 2020-2023  润新知