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

本博客将测试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 = https://www.huyubaike.com/biancheng/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 和System.Text.Json 序列号 反序列化对比

文章插图
然后测试结束:
MessagePack 和System.Text.Json 序列号 反序列化对比

文章插图
我们看到我们的MessagePack的性能在序列号Byte[]的表现对比TextJson上不光是性能比TextJson的更快,内存占用也更小然后是反序列化对象 MessagePack对比TextJson 性能和内存占用都更强在使用MessagePack的前提上我配置了MessagePack的配置

    推荐阅读