Skip to content

微基准测试

本页包含了NinoMessagePack以及MemoryPack的性能对比数据

数据结构

csharp
[NinoType]
[MemoryPackable]
[MessagePackObject]
public partial class SimpleClass
{
    [Key(0)] public int Id;
    [Key(1)] public bool Tag;
    [Key(2)] public Guid Guid;
    [Key(3)] public DateTime CreateTime;
    [Key(4)] public string Name { get; set; }
    [Key(5)] [NinoUtf8] public string Desc;
    [Key(6)] public int[] Numbers { get; set; }
    [Key(7)] public List<DateTime> Dates { get; set; }
    [Key(8)] public Dictionary<int, string> Map1;
    [Key(9)] public Dictionary<int, int> Map2 { get; set; }
}
csharp
[NinoType]
[MemoryPackable]
[MessagePackObject]
public partial struct SimpleStruct
{
    [Key(0)]
    public int Id;
    [Key(1)]
    public DateTime CreateTime;
}

数据生成

生成函数

csharp
public static SimpleClass Create()
{
    Random random = new Random();
    return new SimpleClass
    {
        Id = random.Next(),
        Tag = random.Next() % 2 == 0,
        Guid = Guid.NewGuid(),
        CreateTime = DateTime.Now,
        Name = Guid.NewGuid().ToString(),
        Desc = Enumerable.Range(0, 10).Select(_ => Guid.NewGuid().ToString()).Aggregate((a, b) => a + b),
        Numbers = Enumerable.Range(0, 100).Select(_ => random.Next()).ToArray(),
        Dates = Enumerable.Range(0, 10).Select(_ => DateTime.Now.AddSeconds(random.Next())).ToList(),
        Map1 = Enumerable.Range(0, 10).ToDictionary(n => n, n => n.ToString()),
        Map2 = Enumerable.Range(0, 10).ToDictionary(n => n, n => n * 2)
    };
}
csharp
public static SimpleStruct Create()
{
    Random random = new Random();
    return new SimpleStruct
    {
        Id = random.Next(),
        CreateTime = DateTime.Now.AddSeconds(random.Next())
    };
}

测试数据

csharp
_simpleClass = SimpleClass.Create();
_simpleClasses = Enumerable.Range(0, 100).Select(_ => SimpleClass.Create()).ToArray();
_simpleStruct = SimpleStruct.Create();
_simpleStructs = Enumerable.Range(0, 100).Select(_ => SimpleStruct.Create()).ToArray();

测试环境

BenchmarkDotNet v0.14.0, macOS Sequoia 15.1.1 (24B91) [Darwin 24.1.0]
Apple M1, 1 CPU, 8 logical and 8 physical cores
.NET SDK 9.0.101
  [Host]            : .NET 8.0.6 (8.0.624.26715), Arm64 RyuJIT AdvSIMD
  ShortRun-.NET 9.0 : .NET 9.0.0 (9.0.24.52809), Arm64 RyuJIT AdvSIMD

Job=ShortRun-.NET 9.0  Runtime=.NET 9.0  Server=True  
IterationCount=3  LaunchCount=1  WarmupCount=3

测试结果

测试结果为序列化和反序列化上述数据的耗时,单位为纳秒,结果越低越好

柱状图(缩放后)

表格数据

MethodMeanErrorStdDevRatioRatioSDPayload
MessagePackDeserializeSimpleClass2,185.4818 ns1,603.2680 ns87.8805 ns5.170.30-
MemoryPackDeserializeSimpleClass803.8791 ns2,727.8901 ns149.5249 ns1.900.32-
NinoDeserializeSimpleClass423.6331 ns392.2947 ns21.5030 ns1.000.06-
MessagePackSerializeSimpleClass1,756.9635 ns162.8690 ns8.9274 ns13.680.071.09KB
MemoryPackSerializeSimpleClass313.9742 ns36.5482 ns2.0033 ns2.440.021.12KB
NinoSerializeSimpleClass128.4621 ns7.9049 ns0.4333 ns1.000.001.13KB
MessagePackDeserializeSimpleClasses121,233.0085 ns3,000.5145 ns164.4683 ns3.250.05-
MemoryPackDeserializeSimpleClasses46,809.5000 ns4,394.9217 ns240.9005 ns1.260.02-
NinoDeserializeSimpleClasses37,274.2878 ns11,407.1823 ns625.2662 ns1.000.02-
MessagePackSerializeSimpleClasses184,607.4591 ns46,237.6641 ns2,534.4424 ns12.920.15108.6KB
MemoryPackSerializeSimpleClasses32,528.3135 ns1,266.2714 ns69.4086 ns2.280.00112.11KB
NinoSerializeSimpleClasses14,286.7016 ns143.3106 ns7.8553 ns1.000.00112.5KB
MessagePackDeserializeSimpleStruct46.9248 ns1.2035 ns0.0660 ns120.319.26-
MemoryPackDeserializeSimpleStruct0.9389 ns0.2493 ns0.0137 ns2.410.19-
NinoDeserializeSimpleStruct0.3922 ns0.6706 ns0.0368 ns1.010.11-
MessagePackSerializeSimpleStruct146.7111 ns1.6760 ns0.0919 ns52.050.6216B
MemoryPackSerializeSimpleStruct3.6404 ns0.0488 ns0.0027 ns1.290.0216B
NinoSerializeSimpleStruct2.8189 ns0.7128 ns0.0391 ns1.000.0216B
MessagePackDeserializeSimpleStructs2,247.0066 ns81.3845 ns4.4610 ns24.590.13-
MemoryPackDeserializeSimpleStructs106.7077 ns55.1043 ns3.0205 ns1.170.03-
NinoDeserializeSimpleStructs91.3917 ns9.9898 ns0.5476 ns1.000.01-
MessagePackSerializeSimpleStructs13,201.4372 ns552.1785 ns30.2668 ns528.491.061.57KB
MemoryPackSerializeSimpleStructs27.9057 ns0.0661 ns0.0036 ns1.120.001.57KB
NinoSerializeSimpleStructs24.9794 ns0.1411 ns0.0077 ns1.000.001.57KB
MessagePackDeserializeVectors192,061.3674 ns72,587.8909 ns3,978.7873 ns8.440.60-
MemoryPackDeserializeVectors22,620.0659 ns3,408.8960 ns186.8531 ns0.990.07-
NinoDeserializeVectors22,848.6769 ns33,779.9756 ns1,851.5945 ns1.000.10-
MessagePackSerializeVectors135,550.9609 ns2,408.4577 ns132.0157 ns55.230.20205.08KB
MemoryPackSerializeVectors2,487.1241 ns385.5445 ns21.1330 ns1.010.01156.25KB
NinoSerializeVectors2,454.1336 ns184.7375 ns10.1261 ns1.000.01156.25KB