Releases: JasonXuDeveloper/Nino
Releases · JasonXuDeveloper/Nino
v2.1.9
Nino.Serialization v2.1.9
- [Optimization] Faster deserialization
Performance Report
expand
BenchmarkDotNet v0.14.0, Ubuntu 22.04.5 LTS (Jammy Jellyfish)
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
.NET SDK 9.0.100-rc.2.24474.11
[Host] : .NET 8.0.10 (8.0.1024.46610), X64 RyuJIT AVX2
Job-SZEINI : .NET 9.0.0 (9.0.24.47305), X64 RyuJIT AVX2
Runtime=.NET 9.0 IterationCount=20 WarmupCount=1
Method | Mean | Error | StdDev | Ratio | RatioSD | Payload |
---|---|---|---|---|---|---|
MessagePackDeserializeSimpleClass | 1,656.9624 ns | 9.9603 ns | 11.4703 ns | 2.91 | 0.02 | - |
MemoryPackDeserializeSimpleClass | 608.0360 ns | 3.1047 ns | 3.4509 ns | 1.07 | 0.01 | - |
NinoDeserializeSimpleClass | 570.3600 ns | 2.8679 ns | 3.0687 ns | 1.00 | 0.01 | - |
MessagePackSerializeSimpleClass | 1,125.5807 ns | 5.5435 ns | 6.1616 ns | 3.48 | 0.03 | 674B |
MemoryPackSerializeSimpleClass | 609.3890 ns | 3.5311 ns | 4.0665 ns | 1.88 | 0.02 | 730B |
NinoSerializeSimpleClass | 323.6658 ns | 1.6040 ns | 1.8472 ns | 1.00 | 0.01 | 738B |
MessagePackDeserializeSimpleClasses | 162,804.0272 ns | 343.7450 ns | 353.0008 ns | 2.79 | 0.02 | - |
MemoryPackDeserializeSimpleClasses | 58,781.6250 ns | 298.9097 ns | 344.2249 ns | 1.01 | 0.01 | - |
NinoDeserializeSimpleClasses | 58,359.4109 ns | 387.2718 ns | 445.9828 ns | 1.00 | 0.01 | - |
MessagePackSerializeSimpleClasses | 113,251.7774 ns | 739.2237 ns | 851.2911 ns | 3.65 | 0.03 | 65.82KB |
MemoryPackSerializeSimpleClasses | 54,493.0301 ns | 206.2871 ns | 229.2876 ns | 1.75 | 0.01 | 71.29KB |
NinoSerializeSimpleClasses | 31,058.3509 ns | 91.0732 ns | 93.5254 ns | 1.00 | 0.00 | 72.08KB |
MessagePackDeserializeSimpleStruct | 81.2077 ns | 0.1415 ns | 0.1390 ns | 138.08 | 1.36 | - |
MemoryPackDeserializeSimpleStruct | 2.0382 ns | 0.0038 ns | 0.0039 ns | 3.47 | 0.03 | - |
NinoDeserializeSimpleStruct | 0.5882 ns | 0.0057 ns | 0.0058 ns | 1.00 | 0.01 | - |
MessagePackSerializeSimpleStruct | 84.2770 ns | 0.1370 ns | 0.1346 ns | 10.63 | 0.07 | 16B |
MemoryPackSerializeSimpleStruct | 9.2679 ns | 0.0434 ns | 0.0482 ns | 1.17 | 0.01 | 16B |
NinoSerializeSimpleStruct | 7.9262 ns | 0.0482 ns | 0.0495 ns | 1.00 | 0.01 | 16B |
MessagePackDeserializeSimpleStructs | 5,271.5162 ns | 22.1376 ns | 25.4937 ns | 39.39 | 0.48 | - |
MemoryPackDeserializeSimpleStructs | 157.9820 ns | 1.3055 ns | 1.4511 ns | 1.18 | 0.02 | - |
NinoDeserializeSimpleStructs | 133.8341 ns | 1.3427 ns | 1.5463 ns | 1.00 | 0.02 | - |
MessagePackSerializeSimpleStructs | 4,426.8278 ns | 28.6685 ns | 33.0147 ns | 33.35 | 0.62 | 1.57KB |
MemoryPackSerializeSimpleStructs | 138.0466 ns | 2.0237 ns | 2.3305 ns | 1.04 | 0.02 | 1.57KB |
NinoSerializeSimpleStructs | 132.7684 ns | 2.1022 ns | 2.3366 ns | 1.00 | 0.02 | 1.57KB |
v2.1.8
Nino.Serialization v2.1.8
- [Optimization] Faster serialization
Performance Report
expand
BenchmarkDotNet v0.14.0, Ubuntu 22.04.5 LTS (Jammy Jellyfish)
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
.NET SDK 9.0.100-rc.2.24474.11
[Host] : .NET 8.0.10 (8.0.1024.46610), X64 RyuJIT AVX2
Job-RQNBAO : .NET 9.0.0 (9.0.24.47305), X64 RyuJIT AVX2
Runtime=.NET 9.0 IterationCount=20 WarmupCount=1
Method | Mean | Error | StdDev | Median | Ratio | RatioSD | Payload |
---|---|---|---|---|---|---|---|
MessagePackDeserializeSimpleClass | 1,684.0757 ns | 7.1423 ns | 8.2251 ns | 1,681.4270 ns | 3.03 | 0.02 | - |
MemoryPackDeserializeSimpleClass | 618.1002 ns | 2.3659 ns | 2.7246 ns | 617.0318 ns | 1.11 | 0.01 | - |
NinoDeserializeSimpleClass | 555.8418 ns | 1.9607 ns | 2.1793 ns | 555.5859 ns | 1.00 | 0.01 | - |
MessagePackSerializeSimpleClass | 1,141.3295 ns | 5.7109 ns | 6.5767 ns | 1,137.6271 ns | 3.51 | 0.02 | 674B |
MemoryPackSerializeSimpleClass | 604.3100 ns | 2.0698 ns | 2.3006 ns | 603.3671 ns | 1.86 | 0.01 | 730B |
NinoSerializeSimpleClass | 325.4018 ns | 0.6526 ns | 0.6983 ns | 325.1884 ns | 1.00 | 0.00 | 738B |
MessagePackDeserializeSimpleClasses | 166,229.3099 ns | 341.8615 ns | 351.0665 ns | 166,196.4658 ns | 2.78 | 0.02 | - |
MemoryPackDeserializeSimpleClasses | 78,579.7798 ns | 182.0141 ns | 202.3082 ns | 78,542.1035 ns | 1.32 | 0.01 | - |
NinoDeserializeSimpleClasses | 59,750.6624 ns | 302.3367 ns | 348.1714 ns | 59,637.2159 ns | 1.00 | 0.01 | - |
MessagePackSerializeSimpleClasses | 111,610.1828 ns | 514.2769 ns | 592.2420 ns | 111,416.6483 ns | 3.56 | 0.02 | 65.82KB |
MemoryPackSerializeSimpleClasses | 55,009.0673 ns | 150.6921 ns | 167.4938 ns | 54,951.1398 ns | 1.76 | 0.01 | 71.29KB |
NinoSerializeSimpleClasses | 31,325.3520 ns | 64.6677 ns | 71.8780 ns | 31,324.9421 ns | 1.00 | 0.00 | 72.08KB |
MessagePackDeserializeSimpleStruct | 80.7844 ns | 0.3209 ns | 0.3295 ns | 80.7307 ns | 137.99 | 2.99 | - |
MemoryPackDeserializeSimpleStruct | 2.0323 ns | 0.0097 ns | 0.0107 ns | 2.0282 ns | 3.47 | 0.08 | - |
NinoDeserializeSimpleStruct | 0.5857 ns | 0.0112 ns | 0.0129 ns | 0.5824 ns | 1.00 | 0.03 | - |
MessagePackSerializeSimpleStruct | 85.0759 ns | 0.5106 ns | 0.5675 ns | 84.8559 ns | 10.66 | 0.09 | 16B |
MemoryPackSerializeSimpleStruct | 9.2735 ns | 0.0498 ns | 0.0533 ns | 9.2607 ns | 1.16 | 0.01 | 16B |
NinoSerializeSimpleStruct | 7.9793 ns | 0.0376 ns | 0.0402 ns | 7.9722 ns | 1.00 | 0.01 | 16B |
MessagePackDeserializeSimpleStructs | 5,208.1481 ns | 27.7600 ns | 30.8551 ns | 5,187.7041 ns | 39.48 | 0.42 | - |
MemoryPackDeserializeSimpleStructs | 154.1539 ns | 0.9280 ns | 1.0687 ns | 154.0452 ns | 1.17 | 0.01 | - |
NinoDeserializeSimpleStructs | 131.9351 ns | 1.0877 ns | 1.2090 ns | 131.8611 ns | 1.00 | 0.01 | - |
MessagePackSerializeSimpleStructs | 4,519.1601 ns | 27.7335 ns | 30.8257 ns | 4,503.9492 ns | 33.74 | 0.45 | 1.57KB |
MemoryPackSerializeSimpleStructs | 140.6034 ns | 0.9953 ns | 1.1063 ns | 140.8824 ns | 1.05 | 0.01 | 1.57KB |
NinoSerializeSimpleStructs | 133.9771 ns | 1.4751 ns | 1.5784 ns | 134.0042 ns | 1.00 | 0.02 | 1.57KB |
v2.1.7
Nino.Serialization v2.1.7
- [Optimization] Slightly more efficient serialization/deserialization code for polymorphic types
- [Experimental] Attempt to make deserialization faster for unmanaged types (no guarantee)
Performance Report
expand
BenchmarkDotNet v0.14.0, Ubuntu 22.04.5 LTS (Jammy Jellyfish)
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
.NET SDK 9.0.100-rc.2.24474.11
[Host] : .NET 8.0.10 (8.0.1024.46610), X64 RyuJIT AVX2
Job-XSVIDG : .NET 9.0.0 (9.0.24.47305), X64 RyuJIT AVX2
Runtime=.NET 9.0 IterationCount=10 WarmupCount=1
Method | Mean | Error | StdDev | Ratio | RatioSD | Payload |
---|---|---|---|---|---|---|
MessagePackDeserializeSimpleClass | 1,735.7269 ns | 64.7997 ns | 42.8610 ns | 3.06 | 0.07 | - |
MemoryPackDeserializeSimpleClass | 600.1559 ns | 3.1143 ns | 1.8533 ns | 1.06 | 0.01 | - |
NinoDeserializeSimpleClass | 567.8731 ns | 4.7725 ns | 3.1567 ns | 1.00 | 0.01 | - |
MessagePackSerializeSimpleClass | 1,121.5226 ns | 5.4303 ns | 3.2315 ns | 3.50 | 0.02 | 674B |
MemoryPackSerializeSimpleClass | 574.5112 ns | 4.6980 ns | 3.1074 ns | 1.79 | 0.01 | 730B |
NinoSerializeSimpleClass | 320.4567 ns | 2.6210 ns | 1.7337 ns | 1.00 | 0.01 | 738B |
MessagePackDeserializeSimpleClasses | 167,518.8501 ns | 2,634.1002 ns | 1,742.2942 ns | 2.93 | 0.03 | - |
MemoryPackDeserializeSimpleClasses | 60,703.9168 ns | 611.0878 ns | 363.6485 ns | 1.06 | 0.01 | - |
NinoDeserializeSimpleClasses | 57,152.4554 ns | 403.0304 ns | 266.5797 ns | 1.00 | 0.01 | - |
MessagePackSerializeSimpleClasses | 115,971.2970 ns | 676.3904 ns | 402.5091 ns | 3.80 | 0.02 | 65.82KB |
MemoryPackSerializeSimpleClasses | 53,379.3370 ns | 344.3084 ns | 204.8924 ns | 1.75 | 0.01 | 71.29KB |
NinoSerializeSimpleClasses | 30,551.2235 ns | 151.5804 ns | 90.2031 ns | 1.00 | 0.00 | 72.08KB |
MessagePackDeserializeSimpleStruct | 82.2872 ns | 0.6339 ns | 0.4193 ns | 142.58 | 1.42 | - |
MemoryPackDeserializeSimpleStruct | 2.0471 ns | 0.0201 ns | 0.0133 ns | 3.55 | 0.04 | - |
NinoDeserializeSimpleStruct | 0.5772 ns | 0.0079 ns | 0.0052 ns | 1.00 | 0.01 | - |
MessagePackSerializeSimpleStruct | 83.8371 ns | 0.1810 ns | 0.0947 ns | 10.70 | 0.07 | 16B |
MemoryPackSerializeSimpleStruct | 9.3587 ns | 0.0745 ns | 0.0390 ns | 1.19 | 0.01 | 16B |
NinoSerializeSimpleStruct | 7.8357 ns | 0.0912 ns | 0.0543 ns | 1.00 | 0.01 | 16B |
MessagePackDeserializeSimpleStructs | 5,212.0233 ns | 44.5651 ns | 29.4771 ns | 37.71 | 0.60 | - |
MemoryPackDeserializeSimpleStructs | 156.2208 ns | 2.8479 ns | 1.6947 ns | 1.13 | 0.02 | - |
NinoDeserializeSimpleStructs | 138.2517 ns | 3.2592 ns | 2.1558 ns | 1.00 | 0.02 | - |
MessagePackSerializeSimpleStructs | 4,379.8118 ns | 57.8007 ns | 38.2316 ns | 32.25 | 0.79 | 1.57KB |
MemoryPackSerializeSimpleStructs | 133.2084 ns | 1.5474 ns | 1.0235 ns | 0.98 | 0.02 | 1.57KB |
NinoSerializeSimpleStructs | 135.8834 ns | 4.9176 ns | 3.2527 ns | 1.00 | 0.03 | 1.57KB |
v2.1.6
Nino.Serialization v2.1.6
- [Feature] Support
record struct
- [Optimization] Smarter
NinoType
collect strategy
Performance Report
expand
BenchmarkDotNet v0.14.0, Ubuntu 22.04.5 LTS (Jammy Jellyfish)
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
.NET SDK 9.0.100-rc.2.24474.11
[Host] : .NET 8.0.10 (8.0.1024.46610), X64 RyuJIT AVX2
Job-PQZETG : .NET 8.0.10 (8.0.1024.46610), X64 RyuJIT AVX2
Runtime=.NET 8.0 IterationCount=10 WarmupCount=1
Method | Mean | Error | StdDev | Min | Max | Ratio | Payload |
---|---|---|---|---|---|---|---|
MessagePackDeserializeSimpleClass | 1,696.7026 ns | 10.2447 ns | 6.7762 ns | 1,689.9501 ns | 1,706.3650 ns | 1.00 | - |
MemoryPackDeserializeSimpleClass | 668.3706 ns | 5.9804 ns | 3.5588 ns | 663.3981 ns | 674.3817 ns | 0.39 | - |
NinoDeserializeSimpleClass | 580.4483 ns | 3.4642 ns | 2.0615 ns | 576.7685 ns | 583.5801 ns | 0.34 | - |
MessagePackSerializeSimpleClass | 1,196.2691 ns | 11.1028 ns | 7.3438 ns | 1,187.9833 ns | 1,205.9336 ns | 1.00 | 674B |
MemoryPackSerializeSimpleClass | 714.3994 ns | 5.9792 ns | 3.5581 ns | 710.4542 ns | 719.9061 ns | 0.60 | 730B |
NinoSerializeSimpleClass | 353.8937 ns | 3.5052 ns | 2.0859 ns | 351.0278 ns | 356.0494 ns | 0.30 | 738B |
MessagePackDeserializeSimpleClasses | 50,126.3883 ns | 202.9287 ns | 106.1356 ns | 49,994.0969 ns | 50,252.6737 ns | 1.00 | - |
MemoryPackDeserializeSimpleClasses | 19,243.0195 ns | 285.1748 ns | 188.6255 ns | 19,029.8776 ns | 19,574.7762 ns | 0.38 | - |
NinoDeserializeSimpleClasses | 18,071.2733 ns | 254.5807 ns | 168.3894 ns | 17,780.7536 ns | 18,378.7213 ns | 0.36 | - |
MessagePackSerializeSimpleClasses | 34,206.6663 ns | 224.5739 ns | 133.6403 ns | 34,038.8065 ns | 34,431.9599 ns | 1.00 | 19.75KB |
MemoryPackSerializeSimpleClasses | 19,440.4672 ns | 141.6365 ns | 84.2856 ns | 19,346.9999 ns | 19,595.8338 ns | 0.57 | 21.39KB |
NinoSerializeSimpleClasses | 9,730.9522 ns | 116.7321 ns | 69.4654 ns | 9,579.3028 ns | 9,807.7810 ns | 0.28 | 21.63KB |
MessagePackDeserializeSimpleStruct | 78.8479 ns | 0.2152 ns | 0.1280 ns | 78.7127 ns | 79.1365 ns | 1.000 | - |
MemoryPackDeserializeSimpleStruct | 2.7834 ns | 0.0195 ns | 0.0129 ns | 2.7709 ns | 2.8103 ns | 0.035 | - |
NinoDeserializeSimpleStruct | 0.5744 ns | 0.0122 ns | 0.0081 ns | 0.5644 ns | 0.5882 ns | 0.007 | - |
MessagePackSerializeSimpleStruct | 93.3848 ns | 0.4568 ns | 0.2718 ns | 93.1425 ns | 93.9194 ns | 1.00 | 16B |
MemoryPackSerializeSimpleStruct | 22.3635 ns | 0.8405 ns | 0.5560 ns | 21.6189 ns | 23.0827 ns | 0.24 | 16B |
NinoSerializeSimpleStruct | 8.3228 ns | 0.1912 ns | 0.1265 ns | 8.2018 ns | 8.5444 ns | 0.09 | 16B |
MessagePackDeserializeSimpleStructs | 1,498.3710 ns | 11.8682 ns | 7.8501 ns | 1,491.2468 ns | 1,511.4347 ns | 1.00 | - |
MemoryPackDeserializeSimpleStructs | 86.7634 ns | 1.1466 ns | 0.7584 ns | 85.8071 ns | 87.6628 ns | 0.06 | - |
NinoDeserializeSimpleStructs | 51.9450 ns | 0.7975 ns | 0.5275 ns | 51.2141 ns | 52.6226 ns | 0.03 | - |
MessagePackSerializeSimpleStructs | 1,383.3442 ns | 11.1277 ns | 7.3603 ns | 1,371.1882 ns | 1,393.7797 ns | 1.00 | 483B |
MemoryPackSerializeSimpleStructs | 59.6197 ns | 0.7400 ns | 0.4895 ns | 58.9063 ns | 60.4814 ns | 0.04 | 484B |
NinoSerializeSimpleStructs | 52.5786 ns | 0.5026 ns | 0.3324 ns | 52.0968 ns | 53.1515 ns | 0.04 | 486B |
v2.1.5
v2.1.4
Nino.Serialization v2.1.4
- [Optimization] Remove redundant code generation
- [Optimization] Faster list deserialization
- [Optimization] Slightly improved string serialization performance
v2.1.3
Nino.Serialization v2.1.3
- [Optimization] Remove redundant type id allocation (i.e. abstract class/interface)
- [Optimization] Slightly optimized serialization code (i.e. one less branch but a jump table)
v2.1.2
Nino.Serialization v2.1.2
- [Optimisation] Faster serialization and deserialization for all present data types
v2.1.1
Nino.Serialization v2.1.1
- [Fix] Fix overheads when deserializing a type with parameterless constructor
- [Optimization] Optimize performance when deserializing types with custom parameters, make deserializing field members way faster
v2.1.0
Nino.Serialization v2.1.0
- [Feature] Allow custom constructors for deserialization
- [Feature] Allow record with primary constructors
- [Feature] Fully support records