本博客将测试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的分享

最新文章

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

热门文章

  1. 【java】学习路线1-类型转换、隐式转换、强制转换
  2. 【c语言学习】1 基础环境安装调试
  3. MySQL插入重复数据
  4. .Net下的Http请求调用(Post与Get)
  5. CentOS7_SSH_安装总结
  6. Pwn出题指南
  7. vue开发组件开发中的小技巧
  8. 示例:Ingress通过互联网访问应用
  9. java基础之常用类1
  10. VMware安装Win11+WSA子系统和使用教程