MessagePack 和System.Text.Json 序列化和反序列化性能及对比分析(message in a bottle)快来看

随心笔谈9个月前发布 admin
224 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了使用`MessagePack`和`JsonSerializer`对一组`TestModule`对象进行序列化和反序列化的过程,并通过几个基准测试来衡量这两种序列化方式的性能。代码中定义了一个带有注解的`SerializeTest`类,使用`MemoryDiagnoser`等注解对数据进行分析。在构造函数中,生成了3000个`TestModule`实例,并分别使用`MessagePack`和`Json`格式生成字节数组`Pack`和`Json`。此外,文章还展示了如何通过基准测试比较这两种序列化方式的速度和性能表现。

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”;

}
}
}

© 版权声明

相关文章