Repository navigation
v4.0.0-rc.5
Pre-releaseInstall: dotnet add package Nino --version 4.0.0-rc.5 (Unity package: 4.0.0-preview.205)
New
- Built-in formatters for
BigInteger,Uri,Version,StringBuilder,BitArray,CultureInfo,TimeZoneInfo,Lazy<T>,Memory<T>,ReadOnlyMemory<T>,ReadOnlySequence<T>,ReadOnlyCollection<T>,ReadOnlyObservableCollection<T>,ILookup<TKey, TElement>,IGrouping<TKey, TElement>andBlockingCollection<T>; Nino.Immutable addsImmutableHashSet,ImmutableSortedSet,ImmutableQueue,ImmutableStack,ImmutableDictionaryandImmutableSortedDictionary. - Unity's
AnimationCurve,GradientandRectOffsetserialize out of the box, as members, elements and top-level values,nullandrefreuse included: the Unity package shipsNino.UnityTypes.dllwith their formatters.
Performance
Stack<T>,Queue<T>and collections declared as interfaces (IList<T>,IEnumerable<T>, ...) of unmanaged values or raw[NinoType]structs are written and read as one block: with 1,000ints, 17× to 75× faster to serialize and 2.5× to 6× faster to deserialize. The bytes are unchanged.- Arrays and lists of
[NinoType]structs keep the generated formatter after the struct was serialized on its own:InventoryItem[1000](int, short, bool) serializes in 0.11 µs instead of 1.7 µs and deserializes in 0.7 µs instead of 2.6 µs. Short strings and small blocks are copied inline:List<KeyValuePair<int, string>>serializes in 3.6 µs instead of 4.7 µs. ConcurrentDictionary<,>deserializes 28× faster (1,000 int pairs: 66 µs instead of 1.88 ms), andSortedDictionary<,>1.8× faster (53 µs instead of 96 µs), on par with MemoryPack.- Reading strings is faster on .NET 8 and later: a string of 3 to 12 chars takes 12 to 14 ns instead of 16 to 19, so types with many short strings deserialize 3 to 7% faster (string dictionaries 7%, trees of named nodes 5%).
- Serializing and deserializing classes and structs with nested members is faster: a list of players serializes 19% faster and deserializes 8% faster, lists of small classes 5 to 8%, orders 6% and trees 6 to 10%.
- Reading a new List of unmanaged values or raw structs of 6 KB or more no longer clears its backing array first: a list of 10,000 ints deserializes about 15% faster (4.7 to 4.0 µs).
- ImmutableArray and ImmutableList (Nino.Immutable) are much faster: an ImmutableArray of 1,000 serializes 13× faster (1,075 to 83 ns) and deserializes 8× faster (2.7 to 0.34 µs), ImmutableArray deserializes 11% faster, and an ImmutableList of 1,000 deserializes 3.6× faster (62 to 17.5 µs) and serializes 7% faster.
- Arrays and lists of value tuples and KeyValuePairs of unmanaged values are written and read as one block: 1,000 (int, int) or KeyValuePair<int, int> serialize 16× to 19× faster (1.1-1.3 µs to 68 ns, MemoryPack 93 ns) and deserialize 2.5× to 3× faster; a List<(int, long)> of 1,000 serializes 5.4× faster (1,246 to 231 ns) and deserializes 2× faster.
- Deserializing a
ConcurrentDictionary<TKey, TValue>is about 4x faster (1,000intpairs: 65 µs to 15 µs, 4.2x MemoryPack's time). - Deserializing a new
ConcurrentStack<T>is about 1.9x faster (1,000ints: 17.9 µs to 9.3 µs, half of MemoryPack's time). DateTimeOffsetis read and written through its two fields, and arrays and lists of it as one block: with 1,000 values, 2.9x faster to serialize and 2x faster to deserialize. The bytes are unchanged.- The body of a small class (at most eight members, at most two of them needing a formatter call) is inlined into collection loops, also when the class is not sealed: a list of such a class serializes about 2x faster and deserializes about 1.3x faster.
- Blocks of 64 bytes to 8 KB are written with 64-byte vectors on CPUs with AVX-512 (up to 1.5x faster), and arrays of padded structs with a 64-byte masked copy: 1,000 structs of
int,shortandboolserialize 1.6x faster. - Structs with a string or another non-raw member are passed to their generated body by reference: a list of 1,000 structs of four
longs, astringand anintserializes 2x faster. SortedSet,SortedDictionary,SortedList,LinkedListandConcurrentDictionaryare read and written through their own fields and methods: with 1,000 elements, aSortedListdeserializes 5.5x faster and aSortedSetserializes and deserializes 2x faster.- On x64 CPUs without AVX-512, blocks of 256 bytes to 4 KB are copied with 32-byte vectors (2,500 bytes in 24.6 ns instead of 36.3); on Arm64, arrays of value tuples,
KeyValuePairs and raw structs of up to 8 bytes are rearranged 64 bytes at a time, and on .NET 10 the 16-byte shuffle runs with WebAssembly SIMD too.
Fixes
- On .NET Framework and Mono,
List<T>was written empty and a list read into was left broken: the layout of each collection whose fields Nino uses is now checked once at startup, with a fallback to its public methods.
Every change between v4 releases: Changelog.
What's Changed since v4.0.0-rc.4
37 commits
✨ Features
- feat(core): formatters for more BCL types and every immutable collection (881a825) by @JasonXuDeveloper
- feat(unity): formatters for AnimationCurve, Gradient and RectOffset (1afb9f6) by @JasonXuDeveloper
📦 Runtime, generator and analyzer
- Collections: block-copy raw elements behind interfaces, Stack and Queue (138d836) by @JasonXuDeveloper
⚡ Performance
- perf(core): DateTimeOffset through its fields, raw tuples as one block (45a120f) by @JasonXuDeveloper
- perf(core): struct elements through their generated formatter, small blocks inline (780c900) by @JasonXuDeveloper
- perf(collections): SortedDictionary, SortedList and ConcurrentDictionary through direct calls (c66b623) by @JasonXuDeveloper
- perf(generator): inline small class bodies wherever the formatter is used (e2a3291) by @JasonXuDeveloper
- perf(core): 64-byte vector copies for writes, AVX-512 masked copy for padded structs (bb60ca1) by @JasonXuDeveloper
- perf(generator): pass structs to their out-of-line body by reference (4b300ba) by @JasonXuDeveloper
- perf(core): allocate strings through FastAllocateString and copy them inline (945dbe2) by @JasonXuDeveloper
- perf(core,generator): copy Reader and Writer a field at a time (516975e) by @JasonXuDeveloper
- perf(collections): give new lists of raw elements an uninitialized backing array (294aa27) by @JasonXuDeveloper
- perf(immutable): read and write immutable collections through arrays (7a6df3e) by @JasonXuDeveloper
- perf(collections): write and read tuples and pairs of raw items as one block (17734a2) by @JasonXuDeveloper
- perf(collections): typed paths for the runtime's sorted, linked and concurrent collections (ad2323f) by @JasonXuDeveloper
- perf(core): SIMD paths for AVX2, Arm64 and WebAssembly (ebb63ac) by @JasonXuDeveloper
- perf(collections): build a new ConcurrentDictionary from the pairs read (35d23c0) by @JasonXuDeveloper
- perf(collections): build a new ConcurrentStack or ConcurrentQueue from an array (39ffade) by @JasonXuDeveloper
- perf(core): faster formatters for the new BCL and immutable types (59aeedc) by @JasonXuDeveloper
🐛 Fixes
- fix(collections): check collection field layouts before using them (205ef0e) by @JasonXuDeveloper
🧪 Tests
- test(core): struct element formatters, sorted and concurrent dictionaries, small blocks (0c93283) by @JasonXuDeveloper
- test(benchmarks): CommonTypesTest, data shaped like that of common applications (04f6a7c) by @JasonXuDeveloper
- test(core): vector copy sizes and inlined class bodies in collections (b9ca93b) by @JasonXuDeveloper
- test(core): lists of wide structs with a property round-trip (38c0f8a) by @JasonXuDeveloper
- test(layout): compare the x86-layout struct as bytes (3cf1b93) by @JasonXuDeveloper
- test(benchmarks): compare the new BCL and immutable types with MemoryPack (4fc4f15) by @JasonXuDeveloper
- test(benchmarks): no MemoryPack BitArray cases, and why for BigInteger (ab1d5de) by @JasonXuDeveloper
🔧 Build, CI and dependencies
- Benchmarks: run only v3's Nino and MemoryPack cases (bc8b839) by @JasonXuDeveloper
- ci(release-notes): add a Performance highlight, use Conventional Commits (15ebc35) by @JasonXuDeveloper
- ci: do not fail the Unity job on a GitHub API or storage timeout (8b51568) by @JasonXuDeveloper
- ci(benchmarks): run the benchmark classes in parallel (341c242) by @JasonXuDeveloper
- ci(benchmarks): an Arm64 benchmark workflow and a collections benchmark (766abc9) by @JasonXuDeveloper
- ci(benchmarks): take several filters in the Arm64 benchmark (827bd60) by @JasonXuDeveloper
- chore(release-notes): highlights for the rc.5 commits that had no trailer (46e7ef1) by @JasonXuDeveloper
- ci(benchmarks): run the release benchmarks on Arm64 too (59745c7) by @JasonXuDeveloper
- ci: no checkout of refs named by workflow inputs (cache poisoning) (e06308f) by @JasonXuDeveloper
- ci(benchmarks): name the compared release, not its Unity alias, in the Arm64 summary (5c292e3) by @JasonXuDeveloper
Contributors
Thanks to everyone who contributed to this release: @JasonXuDeveloper
Full Changelog: v4.0.0-rc.4...v4.0.0-rc.5
📊 v3 3.3.13 vs v4 (same machine)
Nino v3 3.3.13 (NuGet) against v4.0.0-rc.5, back to back on the same runner
benchmarks/v3 (the Nino and MemoryPack cases of the same SimpleTest, built against Nino 3.3.13 from nuget.org) ran directly before the v4
SimpleTest run below, 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) |
|---|---|---|---|---|---|
| SerializeSimpleClass | 178.77 ns | 107.32 ns | 0.60x | 382.97 ns | 392.24 ns |
| SerializeSimpleClasses | 25.86 μs | 11.89 μs | 0.46x | 38.67 μs | 38.90 μs |
| SerializeSimpleStruct | 3.51 ns | 4.53 ns | 1.29x | 5.09 ns | 5.12 ns |
| SerializeSimpleStructs | 20.33 ns | 22.22 ns | 1.09x | 21.11 ns | 26.40 ns |
| SerializeVectors | 3.23 μs | 3.56 μs | 1.10x | 3.40 μs | 3.38 μs |
| SerializeFixedClass | - | 9.38 ns | - | 24.22 ns | - |
| SerializeFixedClasses | - | 798.85 ns | - | 1.75 μs | - |
| SerializeFixedStruct | - | 9.24 ns | - | 9.39 ns | - |
| SerializeInventory | - | 90.02 ns | - | 94.30 ns | - |
| SerializeOrders | - | 9.70 μs | - | 15.31 μs | - |
| SerializePlayers | - | 9.83 μs | - | 25.44 μs | - |
| SerializeShapes | - | 1.84 μs | - | 23.30 μs | - |
| SerializeStringDictionary | - | 7.65 μs | - | 31.59 μs | - |
| SerializeTree | - | 11.12 μs | - | 20.15 μs | - |
| SerializeBigInteger | - | 13.18 ns | - | - | - |
| SerializeBitArray | - | 25.32 ns | - | - | - |
| SerializeBlockingCollection | - | 5.41 μs | - | 11.53 μs | - |
| SerializeCultureInfo | - | 5.23 ns | - | 26.30 ns | - |
| SerializeImmutableDictionary | - | 19.59 μs | - | 23.43 μs | - |
| SerializeImmutableHashSet | - | 15.36 μs | - | 21.65 μs | - |
| SerializeImmutableQueue | - | 1.95 μs | - | 8.59 μs | - |
| SerializeImmutableSortedDictionary | - | 9.27 μs | - | 9.82 μs | - |
| SerializeImmutableSortedSet | - | 7.87 μs | - | 19.22 μs | - |
| SerializeImmutableStack | - | 4.24 μs | - | 15.74 μs | - |
| SerializeLazy | - | 6.86 ns | - | 47.39 ns | - |
| SerializeLookup | - | 2.58 μs | - | 9.75 μs | - |
| SerializeMemory | - | 53.80 ns | - | 71.71 ns | - |
| SerializePolymorphicClassArray | - | 79.36 μs | - | 420.02 μs | - |
| SerializePolymorphicClass | - | 6.86 μs | - | 35.45 μs | - |
| SerializePolymorphicFooArray | - | 6.64 μs | - | 50.94 μs | - |
| SerializeReadOnlyCollection | - | 2.39 μs | - | 8.54 μs | - |
| SerializeReadOnlySequence | - | 57.65 ns | - | 73.67 ns | - |
| SerializeStringBuilder | - | 30.67 ns | - | 50.63 ns | - |
| SerializeTimeZoneInfo | - | 6.78 ns | - | 272.73 ns | - |
| SerializeTolerantClass | - | 114.28 ns | - | 520.46 ns | - |
| SerializeTolerantClasses | - | 12.45 μs | - | 51.72 μs | - |
| SerializeUri | - | 6.54 ns | - | 31.07 ns | - |
| SerializeVersion | - | 4.58 ns | - | 22.13 ns | - |
| SerializeConcurrentDictionary | - | 1.18 μs | - | 2.06 μs | - |
| SerializeGraph | - | 2.77 μs | - | 16.20 μs | - |
| SerializeHashSet | - | 617.07 ns | - | 4.21 μs | - |
| SerializeKeyValuePairs | - | 38.35 ns | - | 39.61 ns | - |
| SerializeLinkedList | - | 932.97 ns | - | 4.38 μs | - |
| SerializeQueue | - | 31.97 ns | - | 4.25 μs | - |
| SerializeSortedList | - | 905.92 ns | - | 1.89 μs | - |
| SerializeTupleList | - | 111.18 ns | - | 109.50 ns | - |
| DeserializeNew | - | 458.42 ns | - | 732.48 ns | - |
| DeserializePooled | - | 295.63 ns | - | - | - |
| DeserializeSimpleClass | 544.42 ns | 439.49 ns | 0.81x | 728.65 ns | 719.80 ns |
| DeserializeSimpleClasses | 58.67 μs | 46.30 μs | 0.79x | 73.13 μs | 69.98 μs |
| DeserializeSimpleStruct | 0.70 ns | 0.77 ns | 1.11x | 1.47 ns | 1.47 ns |
| DeserializeSimpleStructs | 86.73 ns | 86.47 ns | 1.00x | 98.18 ns | 99.10 ns |
| DeserializeVectors | 122.76 μs | 117.78 μs | 0.96x | 120.02 μs | 123.49 μs |
| DeserializeFixedClass | - | 9.34 ns | - | 21.60 ns | - |
| DeserializeFixedClasses | - | 1.09 μs | - | 1.29 μs | - |
| DeserializeFixedStruct | - | 0.39 ns | - | 1.03 ns | - |
| DeserializeInventory | - | 434.06 ns | - | 447.70 ns | - |
| DeserializeOrders | - | 28.72 μs | - | 33.96 μs | - |
| DeserializePlayers | - | 31.00 μs | - | 44.03 μs | - |
| DeserializeShapes | - | 10.22 μs | - | 16.20 μs | - |
| DeserializeStringDictionary | - | 37.49 μs | - | 59.07 μs | - |
| DeserializeTree | - | 48.79 μs | - | 66.71 μs | - |
| DeserializeBigInteger | - | 35.72 ns | - | - | - |
| DeserializeBitArray | - | 47.95 ns | - | - | - |
| DeserializeBlockingCollection | - | 5.15 μs | - | 28.96 μs | - |
| DeserializeCultureInfo | - | 46.96 ns | - | 62.92 ns | - |
| DeserializeImmutableDictionary | - | 120.97 μs | - | 112.07 μs | - |
| DeserializeImmutableHashSet | - | 92.93 μs | - | 104.27 μs | - |
| DeserializeImmutableQueue | - | 7.50 μs | - | 9.17 μs | - |
| DeserializeImmutableSortedDictionary | - | 53.27 μs | - | 116.73 μs | - |
| DeserializeImmutableSortedSet | - | 18.27 μs | - | 83.99 μs | - |
| DeserializeImmutableStack | - | 7.41 μs | - | 9.26 μs | - |
| DeserializeLazy | - | 18.77 ns | - | 38.38 ns | - |
| DeserializeLookup | - | 590.28 ns | - | 812.02 ns | - |
| DeserializeMemory | - | 251.81 ns | - | 317.40 ns | - |
| DeserializePolymorphicClassArray | - | 239.43 μs | - | 366.57 μs | - |
| DeserializePolymorphicClass | - | 16.42 μs | - | 28.78 μs | - |
| DeserializePolymorphicFooArray | - | 15.09 μs | - | 28.04 μs | - |
| DeserializeReadOnlyCollection | - | 264.91 ns | - | 306.94 ns | - |
| DeserializeReadOnlySequence | - | 275.21 ns | - | 310.73 ns | - |
| DeserializeStringBuilder | - | 141.39 ns | - | 155.53 ns | - |
| DeserializeTimeZoneInfo | - | 12.21 ns | - | 319.18 ns | - |
| DeserializeTolerantClass | - | 440.77 ns | - | 763.12 ns | - |
| DeserializeTolerantClasses | - | 46.25 μs | - | 75.89 μs | - |
| DeserializeUri | - | 100.36 ns | - | 115.86 ns | - |
| DeserializeVersion | - | 6.84 ns | - | 18.01 ns | - |
| DeserializeConcurrentDictionary | - | 8.17 μs | - | 34.21 μs | - |
| DeserializeGraph | - | 2.97 μs | - | 10.92 μs | - |
| DeserializeHashSet | - | 2.94 μs | - | 3.47 μs | - |
| DeserializeKeyValuePairs | - | 198.05 ns | - | 200.77 ns | - |
| LeavesNew | - | 1.84 μs | - | 1.90 μs | - |
| LeavesPooledElements | - | 1.51 μs | - | - | - |
| LeavesInPlace | - | 280.21 ns | - | - | - |
| DeserializeLinkedList | - | 9.12 μs | - | 8.92 μs | - |
| NodeNew | - | 276.12 ns | - | 315.16 ns | - |
| NodePooled | - | 91.14 ns | - | - | - |
| PlainNew | - | 1.56 μs | - | 1.82 μs | - |
| DeserializeQueue | - | 129.14 ns | - | 1.91 μs | - |
| DeserializeSortedList | - | 934.26 ns | - | 8.22 μs | - |
| DeserializeTupleList | - | 452.51 ns | - | 480.38 ns | - |
v4 vs v3 = mean(v4) / mean(v3); below 1.00x means v4 is faster.
MemoryPack drift (v4 run / v3 run): min 0.80x, max 1.05x (same code in both runs; the spread is the noise floor of this comparison).
(The raw v3 reports are in the workflow artifacts.)
📊 Performance Report
Click to expand benchmark results
BenchmarkDotNet v0.15.8, Linux Ubuntu 26.04.1 LTS (Resolute Raccoon)
AMD EPYC 7763 2.62GHz, 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| PooledTest | NinoDeserializeNew | 458.4233 ns | 452.4613 ns | 471.0810 ns | 1.00 | - | 0.2313 | 0.0005 | - | 2536 B | 1.00 |
| PooledTest | NinoDeserializePooled | 295.6344 ns | 295.1845 ns | 296.0409 ns | 0.64 | - | - | - | - | - | 0.00 |
| PooledTest | MemoryPackDeserializeNew | 732.4786 ns | 723.0288 ns | 738.0784 ns | 1.60 | - | 0.2489 | - | - | 2536 B | 1.00 |
| PooledTest | MemoryPackDeserializeOverwrite | 622.3465 ns | 613.8465 ns | 641.3246 ns | 1.36 | - | 0.1421 | - | - | 1080 B | 0.43 |
| SimpleTest | NinoDeserializeSimpleClass | 439.4920 ns | 432.4484 ns | 446.9412 ns | 1.00 | - | 0.2246 | 0.0005 | - | 2528 B | 1.00 |
| SimpleTest | MemoryPackDeserializeSimpleClass | 728.6529 ns | 720.7179 ns | 738.1123 ns | 1.66 | - | 0.2460 | - | - | 2528 B | 1.00 |
| SimpleTest | MessagePackDeserializeSimpleClass | 1,792.9942 ns | 1,787.2525 ns | 1,806.2812 ns | 4.08 | - | 0.3319 | 0.0019 | - | 2528 B | 1.00 |
| SimpleTest | NinoSerializeSimpleClass | 107.3227 ns | 107.2377 ns | 107.3910 ns | 1.00 | 1,150 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeSimpleClass | 382.9667 ns | 382.8175 ns | 383.1844 ns | 3.57 | 1,148 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeSimpleClass | 1,114.8387 ns | 1,111.2400 ns | 1,121.3156 ns | 10.39 | 1,112 B | - | - | - | - | NA |
| SimpleTest | NinoDeserializeSimpleClasses | 46,295.4322 ns | 45,710.4266 ns | 47,029.2079 ns | 1.00 | - | 17.8833 | 5.7373 | - | 253624 B | 1.00 |
| SimpleTest | MemoryPackDeserializeSimpleClasses | 73,127.2108 ns | 72,072.8093 ns | 74,929.0689 ns | 1.58 | - | 17.2119 | 5.4932 | - | 253624 B | 1.00 |
| SimpleTest | MessagePackDeserializeSimpleClasses | 190,116.3142 ns | 188,825.1985 ns | 192,314.7754 ns | 4.11 | - | 18.3105 | 5.6152 | - | 253624 B | 1.00 |
| SimpleTest | NinoSerializeSimpleClasses | 11,888.7419 ns | 11,839.9685 ns | 12,021.0294 ns | 1.00 | 115,004 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeSimpleClasses | 38,671.3647 ns | 38,293.3707 ns | 39,186.8202 ns | 3.25 | 114,804 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeSimpleClasses | 113,440.9441 ns | 113,323.6672 ns | 113,488.9288 ns | 9.54 | 111,203 B | - | - | - | - | NA |
| SimpleTest | NinoDeserializeSimpleStruct | 0.7744 ns | 0.7713 ns | 0.7781 ns | 1.00 | - | - | - | - | - | NA |
| SimpleTest | MemoryPackDeserializeSimpleStruct | 1.4696 ns | 1.4667 ns | 1.4733 ns | 1.90 | - | - | - | - | - | NA |
| SimpleTest | MessagePackDeserializeSimpleStruct | 76.2440 ns | 76.1376 ns | 76.3384 ns | 98.46 | - | - | - | - | - | NA |
| SimpleTest | NinoSerializeSimpleStruct | 4.5298 ns | 4.5252 ns | 4.5348 ns | 1.00 | 12 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeSimpleStruct | 5.0926 ns | 5.0863 ns | 5.0969 ns | 1.12 | 12 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeSimpleStruct | 57.4728 ns | 57.3543 ns | 57.8093 ns | 12.69 | 16 B | - | - | - | - | NA |
| SimpleTest | NinoDeserializeSimpleStructs | 86.4745 ns | 85.9469 ns | 87.7961 ns | 1.00 | - | 0.1214 | - | - | 1224 B | 1.00 |
| SimpleTest | MemoryPackDeserializeSimpleStructs | 98.1823 ns | 97.6426 ns | 99.1681 ns | 1.14 | - | 0.1214 | - | - | 1224 B | 1.00 |
| SimpleTest | MessagePackDeserializeSimpleStructs | 3,468.4873 ns | 3,443.1195 ns | 3,496.7585 ns | 40.11 | - | 0.4578 | - | - | 1224 B | 1.00 |
| SimpleTest | NinoSerializeSimpleStructs | 22.2223 ns | 22.1361 ns | 22.3460 ns | 1.00 | 1,204 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeSimpleStructs | 21.1085 ns | 21.0605 ns | 21.1433 ns | 0.95 | 1,204 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeSimpleStructs | 3,596.8270 ns | 3,592.4142 ns | 3,607.5204 ns | 161.86 | 1,603 B | - | - | - | - | NA |
| SimpleTest | NinoDeserializeVectors | 117,777.0082 ns | 105,994.2424 ns | 122,368.0876 ns | 1.00 | - | 16.8457 | 16.8457 | 16.8457 | 160033 B | 1.00 |
| SimpleTest | MemoryPackDeserializeVectors | 120,023.4465 ns | 107,409.7055 ns | 126,345.6501 ns | 1.02 | - | 16.7236 | 16.7236 | 16.7236 | 160033 B | 1.00 |
| SimpleTest | MessagePackDeserializeVectors | 382,618.5554 ns | 372,615.7427 ns | 394,719.3154 ns | 3.25 | - | 16.6016 | 16.6016 | 16.6016 | 1016506 B | 6.35 |
| SimpleTest | NinoSerializeVectors | 3,561.2819 ns | 3,551.0668 ns | 3,574.9965 ns | 1.00 | 160,004 B | - | - | - | - | NA |
| SimpleTest | MemoryPackSerializeVectors | 3,398.9624 ns | 3,393.8005 ns | 3,401.9700 ns | 0.95 | 160,004 B | - | - | - | - | NA |
| SimpleTest | MessagePackSerializeVectors | 165,063.4622 ns | 164,936.0234 ns | 165,355.1099 ns | 46.35 | 210,003 B | - | - | - | - | NA |
| FixedSizeTest | NinoDeserializeFixedClass | 9.3423 ns | 9.1507 ns | 9.5260 ns | 1.00 | - | 0.0055 | - | - | 56 B | 1.00 |
| FixedSizeTest | MemoryPackDeserializeFixedClass | 21.6004 ns | 21.5220 ns | 21.7139 ns | 2.31 | - | 0.0074 | - | - | 56 B | 1.00 |
| FixedSizeTest | NinoSerializeFixedClass | 9.3849 ns | 9.2738 ns | 9.5645 ns | 1.00 | 41 B | 0.0060 | - | - | 72 B | 1.00 |
| FixedSizeTest | MemoryPackSerializeFixedClass | 24.2195 ns | 23.9738 ns | 24.6079 ns | 2.58 | 41 B | 0.0094 | - | - | 72 B | 1.00 |
| FixedSizeTest | NinoDeserializeFixedClasses | 1,085.8551 ns | 1,061.2920 ns | 1,107.9866 ns | 1.00 | - | 0.5417 | 0.0038 | - | 6424 B | 1.00 |
| FixedSizeTest | MemoryPackDeserializeFixedClasses | 1,288.6002 ns | 1,279.9289 ns | 1,301.0640 ns | 1.19 | - | 0.5455 | 0.0038 | - | 6424 B | 1.00 |
| FixedSizeTest | NinoSerializeFixedClasses | 798.8505 ns | 787.0186 ns | 808.8215 ns | 1.00 | 4,104 B | 0.3557 | - | - | 4128 B | 1.00 |
| FixedSizeTest | MemoryPackSerializeFixedClasses | 1,747.6687 ns | 1,734.6926 ns | 1,776.4546 ns | 2.19 | 4,104 B | 0.5341 | - | - | 4128 B | 1.00 |
| FixedSizeTest | NinoDeserializeFixedStruct | 0.3914 ns | 0.3897 ns | 0.3929 ns | 1.00 | - | - | - | - | - | NA |
| FixedSizeTest | MemoryPackDeserializeFixedStruct | 1.0281 ns | 1.0246 ns | 1.0351 ns | 2.63 | - | - | - | - | - | NA |
| FixedSizeTest | NinoSerializeFixedStruct | 9.2389 ns | 9.1020 ns | 9.4996 ns | 1.00 | 40 B | 0.0059 | - | - | 64 B | 1.00 |
| FixedSizeTest | MemoryPackSerializeFixedStruct | 9.3851 ns | 9.1771 ns | 9.5894 ns | 1.02 | 40 B | 0.0058 | - | - | 64 B | 1.00 |
| CommonTypesTest | NinoDeserializeInventory | 434.0645 ns | 428.3078 ns | 444.9607 ns | 1.00 | - | 0.7768 | - | - | 8024 B | 1.00 |
| CommonTypesTest | MemoryPackDeserializeInventory | 447.6960 ns | 444.2398 ns | 451.0479 ns | 1.03 | - | 0.7768 | - | - | 8024 B | 1.00 |
| CommonTypesTest | NinoSerializeInventory | 90.0202 ns | 89.9114 ns | 90.1549 ns | 1.00 | 8,004 B | - | - | - | - | NA |
| CommonTypesTest | MemoryPackSerializeInventory | 94.2953 ns | 94.1571 ns | 94.4208 ns | 1.05 | 8,004 B | - | - | - | - | NA |
| CommonTypesTest | NinoDeserializeOrders | 28,721.5866 ns | 28,406.1365 ns | 29,082.8189 ns | 1.00 | - | 7.9651 | 1.2512 | - | 88552 B | 1.00 |
| CommonTypesTest | MemoryPackDeserializeOrders | 33,964.9641 ns | 33,722.1388 ns | 34,435.4169 ns | 1.18 | - | 7.9346 | 1.2207 | - | 88552 B | 1.00 |
| CommonTypesTest | NinoSerializeOrders | 9,698.7701 ns | 9,689.7769 ns | 9,712.7254 ns | 1.00 | 30,848 B | - | - | - | - | NA |
| CommonTypesTest | MemoryPackSerializeOrders | 15,312.7496 ns | 15,291.8302 ns | 15,345.7246 ns | 1.58 | 27,990 B | - | - | - | - | NA |
| CommonTypesTest | NinoDeserializePlayers | 30,997.0199 ns | 30,638.5641 ns | 31,445.0236 ns | 1.00 | - | 10.0708 | 2.0752 | - | 120056 B | 1.00 |
| CommonTypesTest | MemoryPackDeserializePlayers | 44,032.7072 ns | 43,533.2760 ns | 44,654.5059 ns | 1.42 | - | 10.0098 | 2.3193 | - | 120056 B | 1.00 |
| CommonTypesTest | NinoSerializePlayers | 9,831.3801 ns | 9,826.4823 ns | 9,836.7270 ns | 1.00 | 45,124 B | - | - | - | - | NA |
| CommonTypesTest | MemoryPackSerializePlayers | 25,435.1307 ns | 25,401.6054 ns | 25,513.7885 ns | 2.59 | 43,364 B | - | - | - | - | NA |
| CommonTypesTest | NinoDeserializeShapes | 10,216.2161 ns | 10,124.6855 ns | 10,352.6010 ns | 1.00 | - | 3.3722 | 0.2136 | - | 36056 B | 1.00 |
| CommonTypesTest | MemoryPackDeserializeShapes | 16,195.9318 ns | 15,878.9041 ns | 16,815.4279 ns | 1.59 | - | 3.5706 | 0.2136 | - | 36056 B | 1.00 |
| CommonTypesTest | NinoSerializeShapes | 1,842.0866 ns | 1,840.9563 ns | 1,842.8417 ns | 1.00 | 14,004 B | - | - | - | - | NA |
| CommonTypesTest | MemoryPackSerializeShapes | 23,300.3384 ns | 23,268.6403 ns | 23,348.0471 ns | 12.65 | 12,004 B | - | - | - | - | NA |
| CommonTypesTest | NinoDeserializeStringDictionary | 37,487.8074 ns | 36,926.6668 ns | 38,671.9428 ns | 1.00 | - | 9.3994 | 1.7700 | - | 110216 B | 1.00 |
| CommonTypesTest | MemoryPackDeserializeStringDictionary | 59,069.0359 ns | 58,306.3441 ns | 60,183.1198 ns | 1.58 | - | 9.8877 | 1.7700 | - | 110216 B | 1.00 |
| CommonTypesTest | NinoSerializeStringDictionary | 7,651.2305 ns | 7,642.6802 ns | 7,670.5636 ns | 1.00 | 37,464 B | - | - | - | - | NA |
| CommonTypesTest | MemoryPackSerializeStringDictionary | 31,585.0934 ns | 31,561.9161 ns | 31,603.7174 ns | 4.13 | 30,734 B | - | - | - | - | NA |
| CommonTypesTest | NinoDeserializeTree | 48,792.7023 ns | 48,275.8236 ns | 49,282.7678 ns | 1.00 | - | 13.5498 | 3.6621 | - | 171872 B | 1.00 |
| CommonTypesTest | MemoryPackDeserializeTree | 66,705.2791 ns | 65,801.6751 ns | 68,717.9979 ns | 1.37 | - | 13.4277 | 3.6621 | - | 171872 B | 1.00 |
| CommonTypesTest | NinoSerializeTree | 11,122.4163 ns | 11,110.5023 ns | 11,155.5349 ns | 1.00 | 40,676 B | - | - | - | - | NA |
| CommonTypesTest | MemoryPackSerializeTree | 20,145.8354 ns | 20,002.2678 ns | 20,237.6778 ns | 1.81 | 32,623 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeBigInteger | 35.721 ns | 34.954 ns | 36.213 ns | 1.00 | - | 0.0199 | - | - | 256 B | 1.00 |
| BclTypesTest | NinoSerializeBigInteger | 13.178 ns | 13.155 ns | 13.204 ns | 1.00 | 203 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeBitArray | 47.949 ns | 47.215 ns | 48.876 ns | 1.00 | - | 0.0275 | - | - | 336 B | 1.00 |
| BclTypesTest | NinoSerializeBitArray | 25.316 ns | 25.262 ns | 25.379 ns | 1.00 | 129 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeBlockingCollection | 5,149.145 ns | 5,124.416 ns | 5,198.696 ns | 1.00 | - | 1.2970 | 0.0153 | - | 12792 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeBlockingCollection | 28,955.490 ns | 28,641.070 ns | 29,506.753 ns | 5.62 | - | 2.4414 | 0.1221 | - | 17984 B | 1.41 |
| BclTypesTest | NinoSerializeBlockingCollection | 5,405.834 ns | 5,345.071 ns | 5,438.979 ns | 1.00 | 4,004 B | 0.4196 | 0.0153 | 0.0153 | 4096 B | 1.00 |
| BclTypesTest | MemoryPackSerializeBlockingCollection | 11,531.838 ns | 11,510.348 ns | 11,553.122 ns | 2.13 | 4,004 B | - | - | - | 72 B | 0.02 |
| BclTypesTest | NinoDeserializeCultureInfo | 46.964 ns | 46.094 ns | 47.806 ns | 1.00 | - | 0.0123 | - | - | 64 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeCultureInfo | 62.922 ns | 61.905 ns | 63.927 ns | 1.34 | - | 0.0074 | 0.0001 | 0.0001 | - | 0.00 |
| BclTypesTest | NinoSerializeCultureInfo | 5.229 ns | 5.213 ns | 5.241 ns | 1.00 | 14 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeCultureInfo | 26.298 ns | 26.269 ns | 26.352 ns | 5.03 | 13 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeImmutableDictionary | 120,973.834 ns | 120,702.108 ns | 121,374.364 ns | 1.00 | - | 6.2256 | 0.3662 | - | 64064 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeImmutableDictionary | 112,071.102 ns | 111,784.190 ns | 112,327.530 ns | 0.93 | - | 9.2773 | 1.4648 | 0.1221 | - | 0.00 |
| BclTypesTest | NinoSerializeImmutableDictionary | 19,585.689 ns | 19,345.758 ns | 19,958.864 ns | 1.00 | 8,004 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeImmutableDictionary | 23,434.652 ns | 23,373.576 ns | 23,487.596 ns | 1.20 | 8,004 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeImmutableHashSet | 92,927.575 ns | 92,184.454 ns | 94,260.544 ns | 1.00 | - | 7.6904 | 0.8545 | - | 60072 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeImmutableHashSet | 104,272.377 ns | 103,843.362 ns | 104,725.198 ns | 1.12 | - | 5.7373 | 0.8545 | 0.2441 | 56104 B | 0.93 |
| BclTypesTest | NinoSerializeImmutableHashSet | 15,355.297 ns | 15,306.611 ns | 15,388.975 ns | 1.00 | 4,004 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeImmutableHashSet | 21,649.730 ns | 21,437.419 ns | 22,030.892 ns | 1.41 | 4,004 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeImmutableQueue | 7,498.660 ns | 7,474.277 ns | 7,541.688 ns | 1.00 | - | 3.4637 | 0.1373 | - | 36064 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeImmutableQueue | 9,167.492 ns | 9,129.890 ns | 9,258.132 ns | 1.22 | - | 2.9907 | 0.0610 | - | 32112 B | 0.89 |
| BclTypesTest | NinoSerializeImmutableQueue | 1,949.514 ns | 1,946.280 ns | 1,952.813 ns | 1.00 | 4,004 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeImmutableQueue | 8,593.306 ns | 8,580.528 ns | 8,612.452 ns | 4.41 | 4,004 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeImmutableSortedDictionary | 53,265.534 ns | 52,888.927 ns | 53,780.035 ns | 1.00 | - | 15.0757 | 1.8311 | - | 161056 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeImmutableSortedDictionary | 116,734.130 ns | 116,521.561 ns | 117,221.741 ns | 2.19 | - | 5.0049 | 0.4883 | 0.1221 | - | 0.00 |
| BclTypesTest | NinoSerializeImmutableSortedDictionary | 9,266.484 ns | 9,242.952 ns | 9,283.711 ns | 1.00 | 8,004 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeImmutableSortedDictionary | 9,815.718 ns | 9,701.517 ns | 9,897.895 ns | 1.06 | 8,004 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeImmutableSortedSet | 18,265.582 ns | 18,186.363 ns | 18,334.302 ns | 1.00 | - | 5.3711 | 0.2441 | - | 56112 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeImmutableSortedSet | 83,991.161 ns | 83,559.226 ns | 84,476.338 ns | 4.60 | - | 5.6152 | 0.8545 | 0.2441 | - | 0.00 |
| BclTypesTest | NinoSerializeImmutableSortedSet | 7,872.375 ns | 7,843.467 ns | 7,900.079 ns | 1.00 | 4,004 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeImmutableSortedSet | 19,221.573 ns | 19,184.341 ns | 19,278.309 ns | 2.44 | 4,004 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeImmutableStack | 7,410.793 ns | 7,376.981 ns | 7,456.389 ns | 1.00 | - | 3.3569 | 0.0763 | - | 36024 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeImmutableStack | 9,257.014 ns | 9,212.206 ns | 9,313.865 ns | 1.25 | - | 3.0212 | 0.0763 | - | 32040 B | 0.89 |
| BclTypesTest | NinoSerializeImmutableStack | 4,241.066 ns | 4,214.684 ns | 4,277.928 ns | 1.00 | 4,004 B | 1.1063 | 0.0153 | - | 8464 B | 1.00 |
| BclTypesTest | MemoryPackSerializeImmutableStack | 15,738.330 ns | 15,595.778 ns | 15,981.349 ns | 3.71 | 4,004 B | 0.5493 | 0.0305 | 0.0305 | - | 0.00 |
| BclTypesTest | NinoDeserializeLazy | 18.765 ns | 18.689 ns | 18.910 ns | 1.00 | - | 0.0099 | - | - | 112 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeLazy | 38.380 ns | 38.166 ns | 38.639 ns | 2.05 | - | 0.0111 | - | - | 112 B | 1.00 |
| BclTypesTest | NinoSerializeLazy | 6.855 ns | 6.804 ns | 6.890 ns | 1.00 | 49 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeLazy | 47.392 ns | 47.324 ns | 47.444 ns | 6.91 | 31 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeLookup | 590.277 ns | 586.747 ns | 598.996 ns | 1.00 | - | 0.5102 | 0.0029 | - | 5152 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeLookup | 812.018 ns | 801.866 ns | 832.394 ns | 1.38 | - | 0.4740 | 0.0029 | - | 5576 B | 1.08 |
| BclTypesTest | NinoSerializeLookup | 2,577.489 ns | 2,572.180 ns | 2,585.403 ns | 1.00 | 4,084 B | 0.0305 | - | - | 320 B | 1.00 |
| BclTypesTest | MemoryPackSerializeLookup | 9,747.399 ns | 9,668.689 ns | 9,857.342 ns | 3.78 | 4,094 B | 0.0305 | - | - | 320 B | 1.00 |
| BclTypesTest | NinoDeserializeMemory | 251.805 ns | 248.560 ns | 253.624 ns | 1.00 | - | 0.4058 | - | - | 4056 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeMemory | 317.403 ns | 316.069 ns | 318.764 ns | 1.26 | - | 0.3972 | 0.0019 | - | 4056 B | 1.00 |
| BclTypesTest | NinoSerializeMemory | 53.799 ns | 53.745 ns | 53.850 ns | 1.00 | 4,004 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeMemory | 71.709 ns | 71.459 ns | 72.331 ns | 1.33 | 4,004 B | - | - | - | - | NA |
| PolymorphicTest | NinoDeserializePolymorphicClassArray | 239,426.828 ns | 233,915.090 ns | 244,907.490 ns | 1.00 | - | 31.7383 | 14.4043 | - | 745624 B | 1.00 |
| PolymorphicTest | MemoryPackDeserializePolymorphicClassArray | 366,574.075 ns | 360,757.425 ns | 372,383.845 ns | 1.53 | - | 34.1797 | 15.1367 | - | 745624 B | 1.00 |
| PolymorphicTest | MessagePackDeserializePolymorphicClassArray | 1,831,858.215 ns | 1,805,842.613 ns | 1,855,198.270 ns | 7.65 | - | 50.7813 | 25.3906 | 1.9531 | - | 0.00 |
| PolymorphicTest | NinoSerializePolymorphicClassArray | 79,357.193 ns | 79,149.257 ns | 79,511.445 ns | 1.00 | 397,304 B | - | - | - | - | NA |
| PolymorphicTest | MemoryPackSerializePolymorphicClassArray | 420,016.837 ns | 415,845.399 ns | 423,867.994 ns | 5.29 | 384,404 B | - | - | - | - | NA |
| PolymorphicTest | MessagePackSerializePolymorphicClassArray | 931,277.553 ns | 918,973.874 ns | 946,723.278 ns | 11.74 | 487,099 B | - | - | - | - | NA |
| PolymorphicTest | NinoDeserializePolymorphicClass | 16,420.092 ns | 16,329.887 ns | 16,524.883 ns | 1.00 | - | 6.4087 | 0.9460 | - | 79688 B | 1.00 |
| PolymorphicTest | MemoryPackDeserializePolymorphicClass | 28,779.035 ns | 28,677.787 ns | 28,892.823 ns | 1.75 | - | 7.4463 | 1.0681 | - | 79688 B | 1.00 |
| PolymorphicTest | MessagePackDeserializePolymorphicClass | 226,122.953 ns | 223,640.376 ns | 229,818.697 ns | 13.77 | - | 10.0098 | 1.7090 | - | 83856 B | 1.05 |
| PolymorphicTest | NinoSerializePolymorphicClass | 6,857.292 ns | 6,814.354 ns | 6,908.401 ns | 1.00 | 53,789 B | - | - | - | - | NA |
| PolymorphicTest | MemoryPackSerializePolymorphicClass | 35,446.234 ns | 34,476.126 ns | 36,554.381 ns | 5.17 | 51,760 B | - | - | - | - | NA |
| PolymorphicTest | MessagePackSerializePolymorphicClass | 124,693.730 ns | 123,740.089 ns | 126,601.738 ns | 18.18 | 66,859 B | - | - | - | - | NA |
| PolymorphicTest | NinoDeserializePolymorphicFooArray | 15,087.808 ns | 14,939.813 ns | 15,319.911 ns | 1.00 | - | 6.1340 | 0.8087 | - | 76024 B | 1.00 |
| PolymorphicTest | MemoryPackDeserializePolymorphicFooArray | 28,042.340 ns | 27,878.770 ns | 28,229.931 ns | 1.86 | - | 7.2021 | 0.9155 | - | 76024 B | 1.00 |
| PolymorphicTest | MessagePackDeserializePolymorphicFooArray | 215,687.137 ns | 214,188.369 ns | 217,532.682 ns | 14.30 | - | 9.2773 | 1.7090 | - | 76024 B | 1.00 |
| PolymorphicTest | NinoSerializePolymorphicFooArray | 6,642.109 ns | 6,623.558 ns | 6,675.092 ns | 1.00 | 52,404 B | - | - | - | - | NA |
| PolymorphicTest | MemoryPackSerializePolymorphicFooArray | 50,938.355 ns | 49,123.372 ns | 51,640.959 ns | 7.67 | 50,404 B | - | - | - | - | NA |
| PolymorphicTest | MessagePackSerializePolymorphicFooArray | 123,768.405 ns | 123,245.512 ns | 124,441.652 ns | 18.63 | 65,203 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeReadOnlyCollection | 264.914 ns | 262.262 ns | 266.959 ns | 1.00 | - | 0.4058 | - | - | 4048 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeReadOnlyCollection | 306.943 ns | 304.426 ns | 308.923 ns | 1.16 | - | 0.3967 | 0.0024 | - | 4048 B | 1.00 |
| BclTypesTest | NinoSerializeReadOnlyCollection | 2,386.002 ns | 2,383.018 ns | 2,388.334 ns | 1.00 | 4,004 B | 0.0038 | - | - | 40 B | 1.00 |
| BclTypesTest | MemoryPackSerializeReadOnlyCollection | 8,535.364 ns | 8,523.638 ns | 8,549.151 ns | 3.58 | 4,004 B | - | - | - | 40 B | 1.00 |
| BclTypesTest | NinoDeserializeReadOnlySequence | 275.212 ns | 272.518 ns | 279.174 ns | 1.00 | - | 0.4058 | 0.0019 | - | 4064 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeReadOnlySequence | 310.729 ns | 309.449 ns | 313.174 ns | 1.13 | - | 0.3972 | - | - | 4064 B | 1.00 |
| BclTypesTest | NinoSerializeReadOnlySequence | 57.653 ns | 57.559 ns | 57.764 ns | 1.00 | 4,004 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeReadOnlySequence | 73.672 ns | 73.443 ns | 74.103 ns | 1.28 | 4,004 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeStringBuilder | 141.391 ns | 140.905 ns | 141.803 ns | 1.00 | - | 0.2062 | 0.0005 | - | 2072 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeStringBuilder | 155.531 ns | 154.062 ns | 156.978 ns | 1.10 | - | 0.2062 | 0.0005 | - | 2072 B | 1.00 |
| BclTypesTest | NinoSerializeStringBuilder | 30.670 ns | 30.611 ns | 30.771 ns | 1.00 | 2,004 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeStringBuilder | 50.628 ns | 50.538 ns | 50.676 ns | 1.65 | 2,004 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeTimeZoneInfo | 12.207 ns | 12.101 ns | 12.274 ns | 1.00 | - | 0.0042 | - | - | 32 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeTimeZoneInfo | 319.181 ns | 318.198 ns | 321.034 ns | 26.15 | - | 0.0892 | - | - | 680 B | 21.25 |
| BclTypesTest | NinoSerializeTimeZoneInfo | 6.781 ns | 6.768 ns | 6.795 ns | 1.00 | 14 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeTimeZoneInfo | 272.733 ns | 271.761 ns | 274.056 ns | 40.22 | 102 B | 0.0262 | 0.0005 | 0.0005 | - | NA |
| VersionTolerantTest | NinoDeserializeTolerantClass | 440.768 ns | 438.723 ns | 442.648 ns | 1.00 | - | 0.2232 | 0.0005 | - | 2528 B | 1.00 |
| VersionTolerantTest | MemoryPackDeserializeTolerantClass | 763.121 ns | 759.917 ns | 766.918 ns | 1.73 | - | 0.2489 | - | - | 2528 B | 1.00 |
| VersionTolerantTest | NinoSerializeTolerantClass | 114.279 ns | 114.174 ns | 114.380 ns | 1.00 | 1,154 B | - | - | - | - | NA |
| VersionTolerantTest | MemoryPackSerializeTolerantClass | 520.460 ns | 519.832 ns | 521.531 ns | 4.55 | 1,164 B | - | - | - | - | NA |
| VersionTolerantTest | NinoDeserializeTolerantClasses | 46,248.212 ns | 45,941.203 ns | 46,690.457 ns | 1.00 | - | 17.9443 | 5.6763 | - | 253624 B | 1.00 |
| VersionTolerantTest | MemoryPackDeserializeTolerantClasses | 75,886.444 ns | 75,173.082 ns | 76,478.072 ns | 1.64 | - | 17.4561 | 5.2490 | - | 253624 B | 1.00 |
| VersionTolerantTest | NinoSerializeTolerantClasses | 12,447.386 ns | 12,406.796 ns | 12,573.351 ns | 1.00 | 115,404 B | - | - | - | - | NA |
| VersionTolerantTest | MemoryPackSerializeTolerantClasses | 51,718.375 ns | 51,549.197 ns | 52,087.168 ns | 4.16 | 116,404 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeUri | 100.356 ns | 100.032 ns | 100.796 ns | 1.00 | - | 0.0242 | - | - | 184 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeUri | 115.862 ns | 114.840 ns | 116.687 ns | 1.15 | - | 0.0241 | - | - | 184 B | 1.00 |
| BclTypesTest | NinoSerializeUri | 6.540 ns | 6.520 ns | 6.563 ns | 1.00 | 108 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeUri | 31.071 ns | 30.946 ns | 31.282 ns | 4.75 | 60 B | - | - | - | - | NA |
| BclTypesTest | NinoDeserializeVersion | 6.844 ns | 6.795 ns | 6.948 ns | 1.00 | - | 0.0032 | - | - | 32 B | 1.00 |
| BclTypesTest | MemoryPackDeserializeVersion | 18.007 ns | 17.903 ns | 18.113 ns | 2.63 | - | 0.0063 | - | - | 32 B | 1.00 |
| BclTypesTest | NinoSerializeVersion | 4.585 ns | 4.570 ns | 4.598 ns | 1.00 | 16 B | - | - | - | - | NA |
| BclTypesTest | MemoryPackSerializeVersion | 22.132 ns | 22.090 ns | 22.162 ns | 4.83 | 17 B | - | - | - | - | NA |
| CollectionsTest | NinoDeserializeConcurrentDictionary | 8,166.70 ns | 7,975.82 ns | 8,609.30 ns | 1.00 | - | 4.5013 | 0.4120 | - | 49184 B | 1.00 |
| CollectionsTest | MemoryPackDeserializeConcurrentDictionary | 34,212.64 ns | 32,763.12 ns | 36,117.78 ns | 4.19 | - | 12.4512 | 2.1973 | - | 141032 B | 2.87 |
| CollectionsTest | NinoSerializeConcurrentDictionary | 1,184.61 ns | 1,176.52 ns | 1,207.58 ns | 1.00 | 8,004 B | - | - | - | - | NA |
| CollectionsTest | MemoryPackSerializeConcurrentDictionary | 2,056.08 ns | 2,046.81 ns | 2,063.82 ns | 1.74 | 8,004 B | - | - | - | - | NA |
| ReferenceTest | NinoDeserializeGraph | 2,967.68 ns | 2,936.88 ns | 3,003.05 ns | 1.00 | - | 1.3962 | 0.0267 | - | 14104 B | 1.00 |
| ReferenceTest | MemoryPackDeserializeGraph | 10,924.27 ns | 10,849.63 ns | 10,996.31 ns | 3.68 | - | 2.7618 | 0.1373 | - | 14104 B | 1.00 |
| ReferenceTest | NinoSerializeGraph | 2,773.22 ns | 2,748.50 ns | 2,809.63 ns | 1.00 | 5,948 B | - | - | - | - | NA |
| ReferenceTest | MemoryPackSerializeGraph | 16,199.34 ns | 15,878.57 ns | 16,708.80 ns | 5.84 | 5,584 B | - | - | - | - | NA |
| CollectionsTest | NinoDeserializeHashSet | 2,945.00 ns | 2,814.89 ns | 3,086.17 ns | 1.00 | - | 1.7700 | 0.0381 | - | 17768 B | 1.00 |
| CollectionsTest | MemoryPackDeserializeHashSet | 3,466.15 ns | 3,351.19 ns | 3,518.17 ns | 1.18 | - | 2.3575 | 0.1450 | - | 17768 B | 1.00 |
| CollectionsTest | NinoSerializeHashSet | 617.07 ns | 609.73 ns | 630.52 ns | 1.00 | 4,004 B | - | - | - | - | NA |
| CollectionsTest | MemoryPackSerializeHashSet | 4,206.55 ns | 4,166.39 ns | 4,279.45 ns | 6.82 | 4,004 B | - | - | - | - | NA |
| CollectionsTest | NinoDeserializeKeyValuePairs | 198.05 ns | 191.48 ns | 213.60 ns | 1.00 | - | 0.7770 | - | - | 8024 B | 1.00 |
| CollectionsTest | MemoryPackDeserializeKeyValuePairs | 200.77 ns | 198.34 ns | 204.14 ns | 1.01 | - | 0.7768 | - | - | 8024 B | 1.00 |
| CollectionsTest | NinoSerializeKeyValuePairs | 38.35 ns | 38.16 ns | 38.56 ns | 1.00 | 8,004 B | - | - | - | - | NA |
| CollectionsTest | MemoryPackSerializeKeyValuePairs | 39.61 ns | 39.33 ns | 40.20 ns | 1.03 | 8,004 B | - | - | - | - | NA |
| PooledGraphTest | NinoLeavesNew | 1,843.21 ns | 1,789.58 ns | 1,885.27 ns | 1.00 | - | 1.3237 | 0.0267 | - | 13656 B | 1.00 |
| PooledGraphTest | NinoLeavesPooledElements | 1,510.85 ns | 1,483.89 ns | 1,565.52 ns | 0.82 | - | 0.3262 | - | - | 856 B | 0.06 |
| PooledGraphTest | NinoLeavesInPlace | 280.21 ns | 278.06 ns | 282.09 ns | 0.15 | - | - | - | - | - | 0.00 |
| PooledGraphTest | MemoryPackLeavesNew | 1,900.91 ns | 1,865.30 ns | 1,943.08 ns | 1.03 | - | 1.3237 | 0.0229 | - | 13656 B | 1.00 |
| PooledGraphTest | MemoryPackLeavesOverwrite | 2,214.30 ns | 2,181.53 ns | 2,268.05 ns | 1.20 | - | 1.2627 | 0.0076 | - | 12800 B | 0.94 |
| CollectionsTest | NinoDeserializeLinkedList | 9,121.39 ns | 8,775.35 ns | 9,609.78 ns | 1.00 | - | 4.4708 | 0.3662 | - | 48040 B | 1.00 |
| CollectionsTest | MemoryPackDeserializeLinkedList | 8,922.79 ns | 8,645.98 ns | 9,164.75 ns | 0.98 | - | 4.5776 | 0.3967 | - | 48040 B | 1.00 |
| CollectionsTest | NinoSerializeLinkedList | 932.97 ns | 926.88 ns | 947.35 ns | 1.00 | 4,004 B | - | - | - | - | NA |
| CollectionsTest | MemoryPackSerializeLinkedList | 4,380.65 ns | 4,373.03 ns | 4,399.84 ns | 4.70 | 4,004 B | - | - | - | - | NA |
| PooledGraphTest | NinoNodeNew | 276.12 ns | 273.76 ns | 278.16 ns | 1.00 | - | 0.2160 | - | - | 2192 B | 1.00 |
| PooledGraphTest | NinoNodePooled | 91.14 ns | 88.63 ns | 94.21 ns | 0.33 | - | - | - | - | - | 0.00 |
| PooledGraphTest | MemoryPackNodeNew | 315.16 ns | 312.66 ns | 318.17 ns | 1.14 | - | 0.2165 | - | - | 2192 B | 1.00 |
| PooledGraphTest | MemoryPackNodeOverwrite | 259.38 ns | 256.39 ns | 262.37 ns | 0.94 | - | 0.1283 | 0.0005 | 0.0005 | 170 B | 0.08 |
| PooledGraphTest | NinoPlainNew | 1,563.12 ns | 1,523.10 ns | 1,642.07 ns | 1.00 | - | 1.1940 | 0.0191 | - | 12856 B | 1.00 |
| PooledGraphTest | MemoryPackPlainNew | 1,816.67 ns | 1,790.21 ns | 1,839.88 ns | 1.16 | - | 1.2569 | 0.0248 | - | 12856 B | 1.00 |
| CollectionsTest | NinoDeserializeQueue | 129.14 ns | 127.83 ns | 131.39 ns | 1.00 | - | 0.4060 | 0.0026 | - | 4064 B | 1.00 |
| CollectionsTest | MemoryPackDeserializeQueue | 1,914.73 ns | 1,904.86 ns | 1,931.35 ns | 14.83 | - | 0.8011 | 0.0114 | - | 4064 B | 1.00 |
| CollectionsTest | NinoSerializeQueue | 31.97 ns | 31.94 ns | 32.03 ns | 1.00 | 4,004 B | - | - | - | - | NA |
| CollectionsTest | MemoryPackSerializeQueue | 4,247.21 ns | 4,199.42 ns | 4,357.19 ns | 132.86 | 4,004 B | - | - | - | - | NA |
| CollectionsTest | NinoDeserializeSortedList | 934.26 ns | 925.82 ns | 950.48 ns | 1.00 | - | 0.8068 | 0.0076 | - | 8112 B | 1.00 |
| CollectionsTest | MemoryPackDeserializeSortedList | 8,221.84 ns | 8,170.37 ns | 8,310.04 ns | 8.80 | - | 0.9308 | 0.0305 | 0.0153 | - | 0.00 |
| CollectionsTest | NinoSerializeSortedList | 905.92 ns | 901.42 ns | 914.17 ns | 1.00 | 8,004 B | - | - | - | - | NA |
| CollectionsTest | MemoryPackSerializeSortedList | 1,887.77 ns | 1,873.42 ns | 1,901.30 ns | 2.08 | 8,004 B | - | - | - | - | NA |
| CollectionsTest | NinoDeserializeTupleList | 452.51 ns | 443.94 ns | 464.75 ns | 1.00 | - | 1.6394 | - | - | 16056 B | 1.00 |
| CollectionsTest | MemoryPackDeserializeTupleList | 480.38 ns | 474.44 ns | 484.09 ns | 1.06 | - | 1.6441 | 0.0658 | - | 16056 B | 1.00 |
| CollectionsTest | NinoSerializeTupleList | 111.18 ns | 108.10 ns | 113.78 ns | 1.00 | 12,004 B | - | - | - | - | NA |
| CollectionsTest | MemoryPackSerializeTupleList | 109.50 ns | 108.06 ns | 111.15 ns | 0.99 | 16,004 B | - | - | - | - | NA |
The classes ran in parallel, each on its own runner (a class's Nino and MemoryPack cases on one):
- PooledTest, SimpleTest: AMD EPYC 7763 2.62GHz, 1 CPU, 4 logical and 2 physical cores
- CommonTypesTest, FixedSizeTest: AMD EPYC 7763 2.62GHz, 1 CPU, 4 logical and 2 physical cores
- BclTypesTest, PolymorphicTest, VersionTolerantTest: AMD EPYC 7763 3.24GHz, 1 CPU, 4 logical and 2 physical cores
- CollectionsTest, PooledGraphTest, ReferenceTest: AMD EPYC 9V45 4.37GHz, 1 CPU, 4 logical and 2 physical cores
Benchmark generated automatically on 2026-10-18 12:47:47 UTC