Repository navigation
v4.0.0-rc.3
Pre-releaseInstall: dotnet add package Nino --version 4.0.0-rc.3 (Unity package: 4.0.0-preview.203)
Wire format
Only these write different bytes than v4.0.0-rc.2:
- A
[NinoType]struct with[StructLayout(LayoutKind.Explicit)]from another assembly is written member by member in every build, as it already was when seen as source. From a package or a command-line build, rc.2 copied it as raw memory (#202).
New
[assembly: NinoTypeLayout]shows the bytes of every value copied as raw memory: its size and each field's offset, also inside structs that are not[NinoType]s, so changing a field,Pack,Sizeor[FieldOffset]changes the layout. Raw members now readraw(n){name:type@offset:encoding,...}, and the members of a raw type are its raw encoding (#202). Layout MetadataNinoSerializer.Serialize<T>(in T value)takes the value by reference, so serializing a large struct read from a field no longer copies it to the stack first. Source compatible; a method group converted toFunc<T, byte[]>needs a lambda instead.
Fixes
- The generator reads
[StructLayout]and[FieldOffset]of structs from another assembly, which Roslyn does not show as attributes. A struct with explicit field offsets from a package could be copied as raw memory, whose size differs between 64-bit and 32-bit runtimes (#202).
Every change between v4 releases: Changelog.
What's Changed since v4.0.0-rc.2
6 commits
📦 Runtime, generator and analyzer
- Generator: publish raw bytes in NinoTypeLayout, read metadata struct layouts (a3eb84e) by @JasonXuDeveloper
- Core: NinoSerializer.Serialize takes in T (bd8c973) by @JasonXuDeveloper
🔧 Build, CI and dependencies
- Release: publish an existing tag again; group library commits (5a7a521) by @JasonXuDeveloper
- Release: generate the highlights from commit trailers (bddf9cc) by @JasonXuDeveloper
- Benchmarks: a v4 time below the floor counts as faster, not on par (4a4c1f3) by @JasonXuDeveloper
- Benchmarks: write the runtime tables of v4-benchmarks.md from the release report (bb66e4f) by @JasonXuDeveloper
Contributors
Thanks to everyone who contributed to this release: @JasonXuDeveloper
Full Changelog: v4.0.0-rc.2...v4.0.0-rc.3
📊 v3 3.3.13 vs v4 (same machine)
Nino v3 3.3.13 (NuGet) against v4.0.0-rc.3, back to back on the same runner
benchmarks/v3 (the same SimpleTest, built against Nino 3.3.13 from nuget.org) ran directly before the v4
run below, in the same job on the same runner, with the same BenchmarkDotNet settings
(--launchCount 1 --warmupCount 5 --iterationCount 15). MemoryPack runs in both, so its two columns show how much the runner moved.
v4 vs v3
| case | v3 3.3.13 | v4 | v4 vs v3 | MemoryPack (v4 run) | MemoryPack (v3 run) |
|---|---|---|---|---|---|
| SerializeFixedClass | - | 11.44 ns | - | 26.99 ns | - |
| SerializeFixedClasses | - | 825.19 ns | - | 1.92 μs | - |
| SerializeFixedStruct | - | 9.86 ns | - | 10.53 ns | - |
| SerializeGraph | - | 5.63 μs | - | 30.77 μs | - |
| SerializePolymorphicClassArray | - | 76.71 μs | - | 347.94 μs | - |
| SerializePolymorphicClass | - | 6.56 μs | - | 38.11 μs | - |
| SerializePolymorphicFooArray | - | 6.66 μs | - | 32.54 μs | - |
| SerializeSimpleClass | 180.80 ns | 106.89 ns | 0.59x | 385.68 ns | 395.15 ns |
| SerializeSimpleClasses | 23.58 μs | 12.47 μs | 0.53x | 38.58 μs | 56.75 μs |
| SerializeSimpleStruct | 3.51 ns | 4.71 ns | 1.34x | 4.93 ns | 5.22 ns |
| SerializeSimpleStructs | 22.71 ns | 18.18 ns | 0.80x | 21.67 ns | 21.99 ns |
| SerializeTolerantClass | - | 129.70 ns | - | 506.90 ns | - |
| SerializeTolerantClasses | - | 12.46 μs | - | 51.39 μs | - |
| SerializeVectors | 3.40 μs | 3.31 μs | 0.97x | 3.29 μs | 3.20 μs |
| DeserializeFixedClass | - | 10.27 ns | - | 26.25 ns | - |
| DeserializeFixedClasses | - | 1.25 μs | - | 1.39 μs | - |
| DeserializeFixedStruct | - | 0.29 ns | - | 1.25 ns | - |
| DeserializeGraph | - | 7.00 μs | - | 20.90 μs | - |
| LeavesNew | - | 3.42 μs | - | 3.87 μs | - |
| LeavesPooledElements | - | 3.09 μs | - | - | - |
| LeavesInPlace | - | 491.51 ns | - | - | - |
| NodeNew | - | 577.54 ns | - | 669.59 ns | - |
| NodePooled | - | 225.00 ns | - | - | - |
| PlainNew | - | 2.97 μs | - | 4.01 μs | - |
| DeserializePolymorphicClassArray | - | 259.05 μs | - | 386.73 μs | - |
| DeserializePolymorphicClass | - | 16.95 μs | - | 29.64 μs | - |
| DeserializePolymorphicFooArray | - | 15.27 μs | - | 28.36 μs | - |
| DeserializeNew | - | 515.95 ns | - | 747.52 ns | - |
| DeserializePooled | - | 285.05 ns | - | - | - |
| DeserializeSimpleClass | 539.17 ns | 524.91 ns | 0.97x | 791.29 ns | 791.43 ns |
| DeserializeSimpleClasses | 62.95 μs | 54.97 μs | 0.87x | 75.47 μs | 75.03 μs |
| DeserializeSimpleStruct | 0.77 ns | 0.72 ns | 0.93x | 1.46 ns | 1.47 ns |
| DeserializeSimpleStructs | 87.55 ns | 86.91 ns | 0.99x | 98.44 ns | 99.63 ns |
| DeserializeTolerantClass | - | 484.16 ns | - | 757.28 ns | - |
| DeserializeTolerantClasses | - | 50.13 μs | - | 81.64 μs | - |
| DeserializeVectors | 125.09 μs | 123.03 μs | 0.98x | 118.64 μs | 121.72 μs |
v4 vs v3 = mean(v4) / mean(v3); below 1.00x means v4 is faster.
MemoryPack drift (v4 run / v3 run): min 0.68x, max 1.03x (same code in both runs; the spread is the noise floor of this comparison).
v3 3.3.13 report
BenchmarkDotNet v0.15.8, Linux Ubuntu 26.04.1 LTS (Resolute Raccoon)
AMD EPYC 7763 2.59GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.402
[Host] : .NET 10.0.13 (10.0.13, 10.0.1326.50504), X64 RyuJIT x86-64-v3
ShortRun-.NET 10.0 : .NET 10.0.13 (10.0.13, 10.0.1326.50504), X64 RyuJIT x86-64-v3
Job=ShortRun-.NET 10.0 Runtime=.NET 10.0 Server=True
IterationCount=15 LaunchCount=1 WarmupCount=5
| Method | Mean | Min | Max | Ratio | Payload | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|
| NinoDeserializeSimpleClass | 539.1745 ns | 525.8775 ns | 557.6440 ns | 1.00 | - | 0.2232 | - | - | 2552 B | 1.00 |
| MemoryPackDeserializeSimpleClass | 791.4254 ns | 782.5133 ns | 803.6820 ns | 1.47 | - | 0.2460 | - | - | 2528 B | 0.99 |
| MessagePackDeserializeSimpleClass | 1,818.5518 ns | 1,802.6458 ns | 1,834.3951 ns | 3.37 | - | 0.3319 | 0.0019 | - | 2528 B | 0.99 |
| NinoSerializeSimpleClass | 180.7997 ns | 180.4435 ns | 181.2094 ns | 1.00 | 1.13KB | - | - | - | - | NA |
| MemoryPackSerializeSimpleClass | 395.1499 ns | 394.4798 ns | 396.9213 ns | 2.19 | 1.12KB | - | - | - | - | NA |
| MessagePackSerializeSimpleClass | 1,158.8586 ns | 1,149.5939 ns | 1,182.8563 ns | 6.41 | 1.09KB | - | - | - | - | NA |
| NinoDeserializeSimpleClasses | 62,954.8765 ns | 60,595.9494 ns | 65,918.5325 ns | 1.00 | - | 18.5547 | 5.8594 | - | 262424 B | 1.00 |
| MemoryPackDeserializeSimpleClasses | 75,029.7935 ns | 74,049.4639 ns | 76,177.6270 ns | 1.19 | - | 17.5781 | 5.6152 | - | 253624 B | 0.97 |
| MessagePackDeserializeSimpleClasses | 188,140.4509 ns | 186,175.6875 ns | 192,263.7874 ns | 2.99 | - | 18.3105 | 5.6152 | - | 253624 B | 0.97 |
| NinoSerializeSimpleClasses | 23,580.4184 ns | 23,539.7456 ns | 23,646.6360 ns | 1.00 | 112.5KB | - | - | - | - | NA |
| MemoryPackSerializeSimpleClasses | 56,749.6765 ns | 56,691.3507 ns | 56,862.3419 ns | 2.41 | 112.11KB | - | - | - | - | NA |
| MessagePackSerializeSimpleClasses | 112,794.2754 ns | 112,382.2236 ns | 113,640.8375 ns | 4.78 | 108.6KB | - | - | - | - | NA |
| NinoDeserializeSimpleStruct | 0.7674 ns | 0.7630 ns | 0.7833 ns | 1.00 | - | - | - | - | - | NA |
| MemoryPackDeserializeSimpleStruct | 1.4698 ns | 1.4631 ns | 1.4802 ns | 1.92 | - | - | - | - | - | NA |
| MessagePackDeserializeSimpleStruct | 76.9737 ns | 76.8155 ns | 77.4138 ns | 100.31 | - | - | - | - | - | NA |
| NinoSerializeSimpleStruct | 3.5094 ns | 3.4992 ns | 3.5200 ns | 1.00 | 12B | - | - | - | - | NA |
| MemoryPackSerializeSimpleStruct | 5.2197 ns | 5.2047 ns | 5.2523 ns | 1.49 | 12B | - | - | - | - | NA |
| MessagePackSerializeSimpleStruct | 58.1284 ns | 58.0794 ns | 58.1831 ns | 16.56 | 16B | - | - | - | - | NA |
| NinoDeserializeSimpleStructs | 87.5522 ns | 86.3317 ns | 90.3648 ns | 1.00 | - | 0.1214 | - | - | 1224 B | 1.00 |
| MemoryPackDeserializeSimpleStructs | 99.6336 ns | 99.1300 ns | 100.2531 ns | 1.14 | - | 0.1214 | - | - | 1224 B | 1.00 |
| MessagePackDeserializeSimpleStructs | 3,362.8607 ns | 3,353.1814 ns | 3,379.3586 ns | 38.42 | - | 0.1907 | 0.0038 | 0.0038 | - | 0.00 |
| NinoSerializeSimpleStructs | 22.7103 ns | 22.6413 ns | 22.7714 ns | 1.00 | 1.18KB | - | - | - | - | NA |
| MemoryPackSerializeSimpleStructs | 21.9937 ns | 21.9397 ns | 22.0704 ns | 0.97 | 1.18KB | - | - | - | - | NA |
| MessagePackSerializeSimpleStructs | 3,622.9763 ns | 3,615.6915 ns | 3,632.7937 ns | 159.53 | 1.57KB | - | - | - | - | NA |
| NinoDeserializeVectors | 125,090.0080 ns | 111,358.4496 ns | 135,519.4342 ns | 1.00 | - | 17.3340 | 17.3340 | 17.3340 | 160028 B | 1.00 |
| MemoryPackDeserializeVectors | 121,719.4107 ns | 116,371.1533 ns | 128,941.2471 ns | 0.98 | - | 17.3340 | 17.3340 | 17.3340 | 160028 B | 1.00 |
| MessagePackDeserializeVectors | 386,144.8009 ns | 368,845.1074 ns | 398,890.8823 ns | 3.10 | - | 18.0664 | 18.0664 | 18.0664 | 160030 B | 1.00 |
| NinoSerializeVectors | 3,395.0833 ns | 3,386.5401 ns | 3,405.1695 ns | 1.00 | 156.25KB | - | - | - | - | NA |
| MemoryPackSerializeVectors | 3,196.7077 ns | 3,194.5389 ns | 3,202.7027 ns | 0.94 | 156.25KB | - | - | - | - | NA |
| MessagePackSerializeVectors | 165,294.5013 ns | 164,919.5762 ns | 166,389.8538 ns | 48.69 | 205.08KB | - | - | - | - | NA |
📊 Performance Report
Click to expand benchmark results
BenchmarkDotNet v0.15.8, Linux Ubuntu 26.04.1 LTS (Resolute Raccoon)
AMD EPYC 7763 3.10GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.402
[Host] : .NET 10.0.13 (10.0.13, 10.0.1326.50504), X64 RyuJIT x86-64-v3
ShortRun-.NET 10.0 : .NET 10.0.13 (10.0.13, 10.0.1326.50504), X64 RyuJIT x86-64-v3
Job=ShortRun-.NET 10.0 Runtime=.NET 10.0 Server=True
IterationCount=15 LaunchCount=1 WarmupCount=5
| Type | Method | Mean | Min | Max | Ratio | Payload | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|
| FixedSizeTest | NinoDeserializeFixedClass | 10.2685 ns | 9.5797 ns | 10.8149 ns | 1.00 | - | 0.0052 | - | - | 56 B | 1.00 |
| FixedSizeTest | MemoryPackDeserializeFixedClass | 26.2468 ns | 25.8802 ns | 26.8918 ns | 2.56 | - | 0.0074 | - | - | 56 B | 1.00 |
| FixedSizeTest | NinoSerializeFixedClass | 11.4426 ns | 11.1073 ns | 11.9217 ns | 1.00 | 41 B | 0.0060 | - | - | 72 B | 1.00 |
| FixedSizeTest | MemoryPackSerializeFixedClass | 26.9887 ns | 26.4153 ns | 27.5875 ns | 2.36 | 41 B | 0.0071 | - | - | 72 B | 1.00 |
| FixedSizeTest | NinoDeserializeFixedClasses | 1,254.1323 ns | 1,226.4364 ns | 1,308.2103 ns | 1.00 | - | 0.5379 | 0.0038 | - | 6424 B | 1.00 |
| FixedSizeTest | MemoryPackDeserializeFixedClasses | 1,387.7008 ns | 1,331.1118 ns | 1,480.1019 ns | 1.11 | - | 0.5569 | 0.0038 | - | 6424 B | 1.00 |
| FixedSizeTest | NinoSerializeFixedClasses | 825.1911 ns | 812.7566 ns | 845.6565 ns | 1.00 | 4,104 B | 0.3490 | - | - | 4128 B | 1.00 |
| FixedSizeTest | MemoryPackSerializeFixedClasses | 1,916.0670 ns | 1,891.4067 ns | 1,948.4130 ns | 2.32 | 4,104 B | 0.4005 | - | - | 4128 B | 1.00 |
| FixedSizeTest | NinoDeserializeFixedStruct | 0.2895 ns | 0.2822 ns | 0.3042 ns | 1.00 | - | - | - | - | - | NA |
| FixedSizeTest | MemoryPackDeserializeFixedStruct | 1.2500 ns | 1.2454 ns | 1.2561 ns | 4.32 | - | - | - | - | - | NA |
| FixedSizeTest | NinoSerializeFixedStruct | 9.8599 ns | 9.6533 ns | 10.2232 ns | 1.00 | 40 B | 0.0059 | - | - | 64 B | 1.00 |
| FixedSizeTest | MemoryPackSerializeFixedStruct | 10.5273 ns | 9.9554 ns | 11.1514 ns | 1.07 | 40 B | 0.0057 | - | - | 64 B | 1.00 |
| ReferenceTest | NinoDeserializeGraph | 7,002.0688 ns | 6,871.2588 ns | 7,088.2655 ns | 1.00 | - | 1.3885 | 0.0305 | - | 14104 B | 1.00 |
| ReferenceTest | MemoryPackDeserializeGraph | 20,904.1601 ns | 20,601.7972 ns | 21,025.1591 ns | 2.99 | - | 1.4648 | 0.0610 | 0.0305 | - | 0.00 |
| ReferenceTest | NinoSerializeGraph | 5,626.7143 ns | 5,584.1506 ns | 5,751.9855 ns | 1.00 | 5,948 B | - | - | - | - | NA |
| ReferenceTest | MemoryPackSerializeGraph | 30,771.5813 ns | 30,666.7894 ns | 30,934.7155 ns | 5.47 | 5,584 B | - | - | - | - | NA |
| PooledGraphTest | NinoLeavesNew | 3,424.9676 ns | 3,236.1155 ns | 3,609.3615 ns | 1.00 | - | 1.1711 | 0.0191 | - | 13656 B | 1.00 |
| PooledGraphTest | NinoLeavesPooledElements | 3,092.0084 ns | 3,077.5970 ns | 3,124.2380 ns | 0.90 | - | 0.1106 | - | - | 856 B | 0.06 |
| PooledGraphTest | NinoLeavesInPlace | 491.5135 ns | 487.7659 ns | 493.0379 ns | 0.14 | - | - | - | - | - | 0.00 |
| PooledGraphTest | MemoryPackLeavesNew | 3,869.3213 ns | 3,827.1634 ns | 3,921.6104 ns | 1.13 | - | 1.2817 | 0.0229 | - | 13656 B | 1.00 |
| PooledGraphTest | MemoryPackLeavesOverwrite | 5,253.2534 ns | 5,174.9049 ns | 5,396.6413 ns | 1.54 | - | 1.2589 | 0.0076 | - | 12800 B | 0.94 |
| PooledGraphTest | NinoNodeNew | 577.5398 ns | 556.5231 ns | 596.0135 ns | 1.00 | - | 0.2060 | - | - | 2192 B | 1.00 |
| PooledGraphTest | NinoNodePooled | 225.0003 ns | 224.6259 ns | 225.6466 ns | 0.39 | - | - | - | - | - | 0.00 |
| PooledGraphTest | MemoryPackNodeNew | 669.5888 ns | 651.2939 ns | 679.5042 ns | 1.16 | - | 0.2146 | - | - | 2192 B | 1.00 |
| PooledGraphTest | MemoryPackNodeOverwrite | 599.0391 ns | 590.3100 ns | 611.0105 ns | 1.04 | - | 0.1345 | - | - | 1024 B | 0.47 |
| PooledGraphTest | NinoPlainNew | 2,971.0173 ns | 2,863.3556 ns | 3,054.0120 ns | 1.00 | - | 1.0376 | 0.0267 | - | 12856 B | 1.00 |
| PooledGraphTest | MemoryPackPlainNew | 4,012.2591 ns | 3,979.1945 ns | 4,042.9128 ns | 1.35 | - | 1.2207 | 0.0229 | - | 12856 B | 1.00 |
| PolymorphicTest | NinoDeserializePolymorphicClassArray | 259,048.9684 ns | 253,905.4775 ns | 269,073.1099 ns | 1.00 | - | 30.7617 | 13.1836 | - | 745624 B | 1.00 |
| PolymorphicTest | MemoryPackDeserializePolymorphicClassArray | 386,728.7118 ns | 378,740.4500 ns | 398,947.3479 ns | 1.49 | - | 31.7383 | 14.6484 | - | 745624 B | 1.00 |
| PolymorphicTest | MessagePackDeserializePolymorphicClassArray | 1,734,220.6836 ns | 1,714,566.2812 ns | 1,759,621.0547 ns | 6.70 | - | 42.9688 | 19.5313 | - | 1162424 B | 1.56 |
| PolymorphicTest | NinoSerializePolymorphicClassArray | 76,710.1462 ns | 76,504.8229 ns | 77,140.9023 ns | 1.00 | 397,304 B | - | - | - | - | NA |
| PolymorphicTest | MemoryPackSerializePolymorphicClassArray | 347,940.0213 ns | 343,455.5562 ns | 357,253.4937 ns | 4.54 | 384,404 B | - | - | - | - | NA |
| PolymorphicTest | MessagePackSerializePolymorphicClassArray | 918,981.4348 ns | 907,694.3413 ns | 934,824.8765 ns | 11.98 | 487,103 B | - | - | - | - | NA |
| PolymorphicTest | NinoDeserializePolymorphicClass | 16,953.9825 ns | 16,437.3311 ns | 17,583.1497 ns | 1.00 | - | 6.7749 | 0.9460 | - | 79688 B | 1.00 |
| PolymorphicTest | MemoryPackDeserializePolymorphicClass | 29,640.0806 ns | 29,234.3936 ns | 29,817.3289 ns | 1.75 | - | 7.4463 | 1.1902 | - | 79688 B | 1.00 |
| PolymorphicTest | MessagePackDeserializePolymorphicClass | 219,227.4916 ns | 217,661.9287 ns | 221,666.9126 ns | 12.94 | - | 14.4043 | 2.6855 | - | 83856 B | 1.05 |
| PolymorphicTest | NinoSerializePolymorphicClass | 6,555.0711 ns | 6,549.8734 ns | 6,560.5064 ns | 1.00 | 53,789 B | - | - | - | - | NA |
| PolymorphicTest | MemoryPackSerializePolymorphicClass | 38,105.3367 ns | 36,601.2180 ns | 40,249.0663 ns | 5.81 | 51,760 B | - | - | - | - | NA |
| PolymorphicTest | MessagePackSerializePolymorphicClass | 123,758.2916 ns | 123,437.6885 ns | 124,198.5996 ns | 18.88 | 66,859 B | - | - | - | - | NA |
| PolymorphicTest | NinoDeserializePolymorphicFooArray | 15,269.4189 ns | 14,948.7771 ns | 15,790.1055 ns | 1.00 | - | 6.5613 | 0.8545 | - | 76024 B | 1.00 |
| PolymorphicTest | MemoryPackDeserializePolymorphicFooArray | 28,357.6889 ns | 27,942.0350 ns | 29,013.6228 ns | 1.86 | - | 7.2021 | 1.0071 | - | 76024 B | 1.00 |
| PolymorphicTest | MessagePackDeserializePolymorphicFooArray | 215,984.3923 ns | 214,108.3584 ns | 218,138.3699 ns | 14.15 | - | 10.9863 | 2.1973 | 0.2441 | - | 0.00 |
| PolymorphicTest | NinoSerializePolymorphicFooArray | 6,658.4806 ns | 6,648.5596 ns | 6,675.8799 ns | 1.00 | 52,404 B | - | - | - | - | NA |
| PolymorphicTest | MemoryPackSerializePolymorphicFooArray | 32,544.5473 ns | 32,499.6801 ns | 32,637.3989 ns | 4.89 | 50,404 B | - | - | - | - | NA |
| PolymorphicTest | MessagePackSerializePolymorphicFooArray | 119,246.7268 ns | 118,774.7721 ns | 120,006.7089 ns | 17.91 | 65,203 B | - | - | - | - | NA |
| PooledTest | NinoDeserializeNew | 515.9495 ns | 498.4818 ns | 551.6444 ns | 1.00 | - | 0.2146 | - | - | 2536 B | 1.00 |
| PooledTest | NinoDeserializePooled | 285.0481 ns | 284.6184 ns | 285.9831 ns | 0.55 | - | - | - | - | - | 0.00 |
| PooledTest | MemoryPackDeserializeNew | 747.5201 ns | 726.9336 ns | 779.8845 ns | 1.45 | - | 0.2489 | - | - | 2536 B | 1.00 |
| PooledTest | MemoryPackDeserializeOverwrite | 634.0581 ns | 616.6475 ns | 652.5271 ns | 1.23 | - | 0.1421 | - | - | 1080 B | 0.43 |
| SimpleTest | NinoDeserializeSimpleClass | 524.9060 ns | 503.3392 ns | 545.9742 ns | 1.00 | - | 0.2098 | - | - | 2528 B | 1.00 |
| SimpleTest | MemoryPackDeserializeSimpleClass | 791.2875 ns | 773.1844 ns | 824.6852 ns | 1.51 | - | 0.2441 | - | - | 2528 B | 1.00 |
| SimpleTest | MessagePackDeserializeSimpleClass | 1,897.4974 ns | 1,842.2402 ns | 1,968.4221 ns | 3.62 | - | 0.3319 | - | - | 2528 B | 1.00 |
| SimpleTest | NinoSerializeSimpleClass | 106.8892 ns | 106.6624 ns | 107.2499 ns | 1.00 | 1,150 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeSimpleClass | 385.6792 ns | 384.9203 ns | 386.6010 ns | 3.61 | 1,148 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeSimpleClass | 1,128.4843 ns | 1,126.3735 ns | 1,132.0369 ns | 10.56 | 1,112 B | - | - | - | - | NA |
| SimpleTest | NinoDeserializeSimpleClasses | 54,974.2623 ns | 52,249.7043 ns | 56,235.7712 ns | 1.00 | - | 17.8833 | 5.6152 | - | 253624 B | 1.00 |
| SimpleTest | MemoryPackDeserializeSimpleClasses | 75,469.5279 ns | 71,971.6541 ns | 78,009.6971 ns | 1.37 | - | 17.5781 | 5.4932 | - | 253624 B | 1.00 |
| SimpleTest | MessagePackDeserializeSimpleClasses | 193,767.7275 ns | 188,244.0160 ns | 198,172.7782 ns | 3.53 | - | 18.5547 | 5.6152 | - | 253624 B | 1.00 |
| SimpleTest | NinoSerializeSimpleClasses | 12,470.3743 ns | 12,163.5596 ns | 12,851.5166 ns | 1.00 | 115,004 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeSimpleClasses | 38,578.7006 ns | 38,522.4869 ns | 38,613.1440 ns | 3.09 | 114,804 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeSimpleClasses | 110,577.9985 ns | 110,255.0040 ns | 110,674.1385 ns | 8.87 | 111,203 B | - | - | - | - | NA |
| SimpleTest | NinoDeserializeSimpleStruct | 0.7174 ns | 0.7129 ns | 0.7230 ns | 1.00 | - | - | - | - | - | NA |
| SimpleTest | MemoryPackDeserializeSimpleStruct | 1.4629 ns | 1.4565 ns | 1.4751 ns | 2.04 | - | - | - | - | - | NA |
| SimpleTest | MessagePackDeserializeSimpleStruct | 77.2278 ns | 77.0511 ns | 77.6084 ns | 107.65 | - | - | - | - | - | NA |
| SimpleTest | NinoSerializeSimpleStruct | 4.7096 ns | 4.7040 ns | 4.7137 ns | 1.00 | 12 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeSimpleStruct | 4.9279 ns | 4.9190 ns | 4.9479 ns | 1.05 | 12 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeSimpleStruct | 57.9600 ns | 57.9046 ns | 58.0147 ns | 12.31 | 16 B | - | - | - | - | NA |
| SimpleTest | NinoDeserializeSimpleStructs | 86.9148 ns | 85.1687 ns | 88.1994 ns | 1.00 | - | 0.1214 | - | - | 1224 B | 1.00 |
| SimpleTest | MemoryPackDeserializeSimpleStructs | 98.4383 ns | 97.0851 ns | 99.7108 ns | 1.13 | - | 0.1214 | - | - | 1224 B | 1.00 |
| SimpleTest | MessagePackDeserializeSimpleStructs | 3,417.5674 ns | 3,393.9581 ns | 3,465.0714 ns | 39.33 | - | 0.1793 | 0.0038 | 0.0038 | - | 0.00 |
| SimpleTest | NinoSerializeSimpleStructs | 18.1776 ns | 18.1191 ns | 18.2884 ns | 1.00 | 1,204 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeSimpleStructs | 21.6651 ns | 21.5612 ns | 21.7475 ns | 1.19 | 1,204 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeSimpleStructs | 3,577.5127 ns | 3,573.9002 ns | 3,583.7001 ns | 196.81 | 1,603 B | - | - | - | - | NA |
| VersionTolerantTest | NinoDeserializeTolerantClass | 484.1642 ns | 477.4966 ns | 495.7797 ns | 1.00 | - | 0.2098 | - | - | 2528 B | 1.00 |
| VersionTolerantTest | MemoryPackDeserializeTolerantClass | 757.2776 ns | 746.3483 ns | 774.7480 ns | 1.56 | - | 0.2480 | - | - | 2528 B | 1.00 |
| VersionTolerantTest | NinoSerializeTolerantClass | 129.7017 ns | 129.0743 ns | 130.4947 ns | 1.00 | 1,154 B | - | - | - | - | NA |
| VersionTolerantTest | MemoryPackSerializeTolerantClass | 506.8982 ns | 506.4208 ns | 507.5093 ns | 3.91 | 1,164 B | - | - | - | - | NA |
| VersionTolerantTest | NinoDeserializeTolerantClasses | 50,129.9392 ns | 49,298.3006 ns | 50,744.8070 ns | 1.00 | - | 17.8833 | 5.5542 | - | 253624 B | 1.00 |
| VersionTolerantTest | MemoryPackDeserializeTolerantClasses | 81,635.6448 ns | 80,663.5094 ns | 82,507.9683 ns | 1.63 | - | 17.2119 | 5.3711 | - | 253624 B | 1.00 |
| VersionTolerantTest | NinoSerializeTolerantClasses | 12,462.4790 ns | 12,420.6280 ns | 12,595.1102 ns | 1.00 | 115,404 B | - | - | - | - | NA |
| VersionTolerantTest | MemoryPackSerializeTolerantClasses | 51,394.2034 ns | 51,361.2393 ns | 51,441.9163 ns | 4.12 | 116,404 B | - | - | - | - | NA |
| SimpleTest | NinoDeserializeVectors | 123,025.4289 ns | 115,902.1872 ns | 129,728.2682 ns | 1.00 | - | 16.7236 | 16.7236 | 16.7236 | 160033 B | 1.00 |
| SimpleTest | MemoryPackDeserializeVectors | 118,641.1069 ns | 112,647.2773 ns | 122,545.6609 ns | 0.97 | - | 14.5264 | 14.5264 | 14.5264 | 160028 B | 1.00 |
| SimpleTest | MessagePackDeserializeVectors | 374,780.5771 ns | 365,567.3196 ns | 388,239.5203 ns | 3.05 | - | 17.0898 | 17.0898 | 17.0898 | 160034 B | 1.00 |
| SimpleTest | NinoSerializeVectors | 3,306.5613 ns | 3,299.2709 ns | 3,313.3637 ns | 1.00 | 160,004 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeVectors | 3,285.2044 ns | 3,280.1836 ns | 3,295.0524 ns | 0.99 | 160,004 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeVectors | 165,364.0805 ns | 165,201.0515 ns | 165,589.4927 ns | 50.01 | 210,003 B | - | - | - | - | NA |
Benchmark generated automatically on 2026-10-17 14:12:16 UTC