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的配置

    推薦閱讀