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的更強
到此這篇關于MessagePack 和System.Text.Json 序列化和反序列化性能及對比分析的文章就介紹到這了,更多相關MessagePack 和System.Text.Json 序列化和反序列化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
密碼綁定至密碼文本框中(TextMode設為Password)
一般情況之下TextBox的TextMode設為Password話,我們想在后臺(.cs)綁定一個值至此文本框,是無法實現的,如果一定要綁定值的話,該如何實現呢?,本文將告訴你實現方法,感興趣的朋友可以參考下2013-01-01
如何處理ASP.NET Core中HTML5客戶端路由回退的問題
這篇文章主要給大家介紹了關于如何處理ASP.NET Core中HTML5客戶端路由回退的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-11-11
剖析Asp.Net Web API路由系統---WebHost部署方式
這篇文章主要介紹了剖析Asp.Net Web API路由系統---WebHost部署方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-02-02
Asp.net core利用IIS在windows上進行托管步驟詳解
這篇文章主要給大家介紹了關于Asp.net core利用IIS在windows上進行托管步驟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-03-03
Linux(Ubuntu)下搭建ASP.NET Core環(huán)境
本文給大家介紹的是無需安裝mono,在Linux(Ubuntu14.04.4 LTS)下搭建ASP.NET Core環(huán)境 繼續(xù).NET跨平臺,希望對大家能夠有所幫助。2016-07-07

