MessagePack 和System.Text.Json 序列号 反序列化对比
2024-08-29 05:28:02
本博客将测试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的分享
最新文章
- c++模板函数实例化的偏序机制
- .net实现webservice简单实例分享
- setCapture只能作用于鼠标不可作用于键盘等其它事件
- [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧
- ASP.NET环境下配置FCKEditor并上传图片及其它文件
- JS中showModalDialog 详细使用(转)
- SlidingMenu侧换菜单的导入
- 有利于SEO的DIV+CSS规范小结
- css 椭圆样式
- 编程实现将一个N进制数转换成M进制数
- 使用IntelliJ Idea新建SpringBoot项目
- idea新建一个spring项目,图解
- linux的基本操作3(权限)
- 直接获取摄像头传回的图像数据(人脸、微笑、眨眼: 识别--&;gt;第一步):图像识别第一步
- 关于UC、火狐、谷歌浏览器屏蔽布局中广告的解决办法
- Minimum Cost(最小费用最大流,好题)
- ContactsContract.Contacts之sort_key
- PHP 中 strlen 获取中英 字符长度 以作以后对比使用
- 看用Tornado如何自定义实现表单验证
- fzu 2039 Pets (简单二分图 + (最大流 || 二分图))