• 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

  • 相关阅读:
    Java经典编程题50道之二十九
    Java经典编程题50道之二十八
    Java经典编程题50道之二十七
    Java经典编程题50道之二十六
    Java经典编程题50道之二十五
    Python3爬虫(十一) 爬虫与反爬虫
    Python3爬虫(十) 数据存储之非关系型数据库MongoDB
    Python3爬虫(九) 数据存储之关系型数据库MySQL
    Python3爬虫(八) 数据存储之TXT、JSON、CSV
    Python3爬虫(六) 解析库的使用之Beautiful Soup
  • 原文地址:https://www.cnblogs.com/mq0036/p/16887977.html
Copyright © 2020-2023  润新知