MessagePack 和System.Text.Json 序列化和反序列化性能及對(duì)比分析
本博客將測(cè)試MessagePack 和System.Text.Json 序列化和反序列化性能
項(xiàng)目文件:
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";} }}
然后我們將使用基準(zhǔn)測(cè)試開始我們的性能測(cè)試:
然后測(cè)試結(jié)束:
我們看到我們的MessagePack的性能在序列化Byte[]的表現(xiàn)對(duì)比TextJson上不光是性能比TextJson的更快,內(nèi)存占用也更小
然后是反序列化對(duì)象 MessagePack對(duì)比TextJson 性能和內(nèi)存占用都更強(qiáng)
在使用MessagePack的前提上我配置了MessagePack的配置 MessagePack.Resolvers.ContractlessStandardResolver.Options
如果不加 MessagePack.Resolvers.ContractlessStandardResolver.Options 性能可能并不比Json更快更好 啟用了配置以后模型不需要添加特性 并且性能更快
在需要更快性能的場(chǎng)景MessagePack更適合 并且傳輸?shù)捏w積更小,所以非常推薦在需要性能的場(chǎng)景下使用MessagePack
順便我還測(cè)試過(guò)嵌套序列化和反序列化MessagePack的表現(xiàn)還是比Json的更強(qiáng)
到此這篇關(guān)于MessagePack 和System.Text.Json 序列化和反序列化性能及對(duì)比分析的文章就介紹到這了,更多相關(guān)MessagePack 和System.Text.Json 序列化和反序列化內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
