Closed Arkatufus closed 2 years ago
Turning off caching improves the performance, closer to what it was before. Removing the caching optimization.
After removing failed type caching: | Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|---|
Cyclic_References | 975.2 ns | 9.44 ns | 8.37 ns | 966.4 ns | 991.7 ns | 1,025,448.4 | 0.1888 | 1 KB | |
Filtered_Cyclic_References | 972.4 ns | 18.91 ns | 18.58 ns | 949.5 ns | 1,001.2 ns | 1,028,427.6 | 0.1888 | 1 KB | |
Virtual_Classes | 745.6 ns | 5.15 ns | 4.30 ns | 736.1 ns | 752.8 ns | 1,341,113.8 | 0.1850 | 1 KB | |
Filtered_Virtual_Classes | 755.0 ns | 8.92 ns | 7.91 ns | 746.5 ns | 771.0 ns | 1,324,457.5 | 0.1850 | 1 KB | |
Large_Sealed_Classes | 3,396.2 ns | 42.30 ns | 39.57 ns | 3,338.8 ns | 3,452.3 ns | 294,447.6 | 0.4311 | 3 KB | |
Filtered_Large_Sealed_Classes | 3,308.2 ns | 18.99 ns | 16.84 ns | 3,288.6 ns | 3,339.1 ns | 302,276.4 | 0.4311 | 3 KB | |
Generic_Classes | 1,935.7 ns | 35.17 ns | 32.90 ns | 1,896.2 ns | 1,992.1 ns | 516,620.2 | 0.2174 | 1 KB | |
Filtered_Generic_Classes | 1,961.9 ns | 36.03 ns | 33.70 ns | 1,920.4 ns | 2,016.5 ns | 509,704.2 | 0.2174 | 1 KB |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
Byte_Array | 201.9 ns | 1.53 ns | 1.20 ns | 200.2 ns | 204.2 ns | 4,952,619.6 | 0.0420 | 265 B |
String_Array | 1,215.7 ns | 23.25 ns | 21.75 ns | 1,195.3 ns | 1,261.5 ns | 822,589.8 | 0.0877 | 562 B |
Dictionary | 4,134.1 ns | 28.04 ns | 21.89 ns | 4,098.1 ns | 4,168.0 ns | 241,889.9 | 0.4044 | 2,576 B |
Array_List | 1,748.1 ns | 30.35 ns | 28.39 ns | 1,717.0 ns | 1,801.6 ns | 572,049.3 | 0.1926 | 1,220 B |
Linked_List | 8,282.4 ns | 81.35 ns | 72.12 ns | 8,191.4 ns | 8,428.8 ns | 120,737.3 | 0.8240 | 5,224 B |
Hash_Set | 10,500.9 ns | 138.22 ns | 129.29 ns | 10,339.7 ns | 10,748.4 ns | 95,229.8 | 1.0376 | 6,588 B |
Sorted_Set | 13,342.5 ns | 191.81 ns | 179.42 ns | 13,133.2 ns | 13,656.4 ns | 74,948.6 | 1.0986 | 6,950 B |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
Immutable_Array | 2.361 μs | 0.0301 μs | 0.0282 μs | 2.327 μs | 2.401 μs | 423,593.1 | 0.1869 | 1 KB |
Immutable_List | 3.170 μs | 0.0439 μs | 0.0411 μs | 3.129 μs | 3.257 μs | 315,410.7 | 0.2556 | 2 KB |
Immutable_Hash_Set | 5.454 μs | 0.0930 μs | 0.0824 μs | 5.387 μs | 5.662 μs | 183,345.6 | 0.2899 | 2 KB |
Immutable_Sorted_Set | 7.682 μs | 0.1295 μs | 0.1211 μs | 7.554 μs | 7.912 μs | 130,168.2 | 0.2899 | 2 KB |
Immutable_Dictionary | 7.401 μs | 0.0958 μs | 0.0896 μs | 7.279 μs | 7.545 μs | 135,120.4 | 0.4578 | 3 KB |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
Boolean | 95.03 ns | 1.760 ns | 1.646 ns | 92.25 ns | 98.67 ns | 10,523,265.2 | 0.0395 | 249 B |
Byte | 101.63 ns | 2.002 ns | 1.872 ns | 98.92 ns | 105.60 ns | 9,839,995.5 | 0.0395 | 249 B |
SByte | 91.20 ns | 1.318 ns | 1.233 ns | 89.91 ns | 93.35 ns | 10,964,543.0 | 0.0395 | 249 B |
Int16 | 121.12 ns | 1.669 ns | 1.561 ns | 119.01 ns | 124.31 ns | 8,255,941.2 | 0.0393 | 249 B |
UInt16 | 124.61 ns | 2.407 ns | 2.134 ns | 121.74 ns | 129.17 ns | 8,024,922.7 | 0.0393 | 249 B |
Int32 | 127.94 ns | 1.533 ns | 1.434 ns | 125.50 ns | 129.92 ns | 7,816,232.7 | 0.0393 | 249 B |
UInt32 | 131.12 ns | 1.728 ns | 1.616 ns | 128.72 ns | 134.01 ns | 7,626,750.9 | 0.0393 | 249 B |
Int64 | 135.89 ns | 1.265 ns | 1.183 ns | 133.82 ns | 137.75 ns | 7,358,648.1 | 0.0393 | 249 B |
UInt64 | 141.39 ns | 1.625 ns | 1.357 ns | 139.52 ns | 143.03 ns | 7,072,474.5 | 0.0393 | 249 B |
Single | 128.69 ns | 0.963 ns | 0.804 ns | 127.40 ns | 129.73 ns | 7,770,884.8 | 0.0393 | 249 B |
Double | 140.09 ns | 1.294 ns | 1.147 ns | 137.64 ns | 141.88 ns | 7,138,055.1 | 0.0393 | 249 B |
Decimal | 209.53 ns | 1.468 ns | 1.373 ns | 207.25 ns | 211.83 ns | 4,772,511.5 | 0.0546 | 345 B |
Guids | 133.17 ns | 1.322 ns | 1.172 ns | 131.06 ns | 134.85 ns | 7,508,963.6 | 0.0546 | 345 B |
DateTimes | 136.70 ns | 2.670 ns | 2.367 ns | 134.41 ns | 142.34 ns | 7,315,548.2 | 0.0393 | 249 B |
TimeSpan | 358.54 ns | 4.770 ns | 4.462 ns | 352.12 ns | 366.02 ns | 2,789,061.6 | 0.0887 | 562 B |
String | 345.05 ns | 2.232 ns | 2.088 ns | 340.91 ns | 347.92 ns | 2,898,098.8 | 0.1092 | 690 B |
Type | 7,514.85 ns | 103.870 ns | 97.160 ns | 7,365.22 ns | 7,679.79 ns | 133,069.8 | 1.4267 | 9,035 B |
Tuple1 | 763.72 ns | 4.113 ns | 3.646 ns | 759.33 ns | 772.26 ns | 1,309,383.8 | 0.0973 | 618 B |
Tuple2 | 1,208.71 ns | 16.673 ns | 15.596 ns | 1,192.13 ns | 1,240.49 ns | 827,328.9 | 0.1278 | 818 B |
Tuple3 | 1,478.08 ns | 3.261 ns | 2.890 ns | 1,472.37 ns | 1,482.65 ns | 676,551.6 | 0.1373 | 875 B |
Tuple4 | 9,530.19 ns | 97.328 ns | 86.279 ns | 9,359.48 ns | 9,656.77 ns | 104,929.7 | 1.5411 | 9,765 B |
Tuple5 | 9,912.71 ns | 100.935 ns | 94.414 ns | 9,764.83 ns | 10,071.09 ns | 100,880.6 | 1.5564 | 9,837 B |
Tuple6 | 10,410.53 ns | 147.584 ns | 138.051 ns | 10,196.36 ns | 10,633.43 ns | 96,056.5 | 1.5564 | 9,910 B |
Tuple7 | 11,183.23 ns | 138.297 ns | 129.363 ns | 10,953.22 ns | 11,381.45 ns | 89,419.6 | 1.6174 | 10,271 B |
Tuple8 | 12,138.62 ns | 100.537 ns | 89.124 ns | 12,049.70 ns | 12,320.19 ns | 82,381.7 | 1.7090 | 10,808 B |
ValueTuple1 | 379.65 ns | 3.079 ns | 2.880 ns | 375.12 ns | 383.46 ns | 2,633,991.4 | 0.0954 | 602 B |
ValueTuple2 | 603.55 ns | 8.481 ns | 7.933 ns | 594.19 ns | 616.49 ns | 1,656,869.2 | 0.1259 | 794 B |
ValueTuple3 | 662.38 ns | 4.314 ns | 3.824 ns | 656.19 ns | 669.56 ns | 1,509,706.3 | 0.1307 | 826 B |
ValueTuple4 | 8,486.44 ns | 137.681 ns | 128.787 ns | 8,314.60 ns | 8,770.29 ns | 117,835.0 | 1.5259 | 9,717 B |
ValueTuple5 | 8,619.08 ns | 91.695 ns | 85.771 ns | 8,498.94 ns | 8,807.39 ns | 116,021.6 | 1.5411 | 9,765 B |
ValueTuple6 | 8,599.26 ns | 133.539 ns | 124.913 ns | 8,437.71 ns | 8,842.93 ns | 116,289.1 | 1.5411 | 9,821 B |
ValueTuple7 | 9,055.20 ns | 56.550 ns | 52.897 ns | 8,927.11 ns | 9,124.27 ns | 110,433.8 | 1.6022 | 10,150 B |
ValueTuple8 | 9,601.59 ns | 152.068 ns | 142.244 ns | 9,362.62 ns | 9,799.54 ns | 104,149.5 | 1.6937 | 10,720 B |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
Enums | 363.1 ns | 2.61 ns | 2.44 ns | 359.2 ns | 367.5 ns | 2,754,416.4 | 0.0925 | 586 B |
Filtered_Enums | 361.2 ns | 7.14 ns | 7.34 ns | 352.2 ns | 375.9 ns | 2,768,911.1 | 0.0925 | 586 B |
Standard_Value_Types | 1,147.5 ns | 8.22 ns | 6.42 ns | 1,135.9 ns | 1,156.5 ns | 871,471.8 | 0.1163 | 738 B |
Filtered_Standard_Value_Types | 1,144.0 ns | 5.64 ns | 5.27 ns | 1,136.8 ns | 1,155.5 ns | 874,096.8 | 0.1163 | 738 B |
Blittable_Value_Types | 710.2 ns | 14.15 ns | 13.24 ns | 696.0 ns | 731.2 ns | 1,408,073.9 | 0.1001 | 634 B |
Filtered_Blittable_Value_Types | 699.7 ns | 3.65 ns | 3.41 ns | 695.8 ns | 706.4 ns | 1,429,240.7 | 0.1001 | 634 B |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
DeserializeDanger | 20.94 μs | 0.055 μs | 0.043 μs | 20.88 μs | 21.03 μs | 47,754.3 | 0.3052 | 2 KB |
I think this is now an acceptable performance hit for adding type checking during serialization
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
Cyclic_References | 994.6 ns | 6.22 ns | 5.51 ns | 985.3 ns | 1,004.7 ns | 1,005,425.6 | 0.1888 | 1 KB |
Filtered_Cyclic_References | 995.0 ns | 9.64 ns | 8.55 ns | 976.8 ns | 1,007.2 ns | 1,005,067.5 | 0.1888 | 1 KB |
Virtual_Classes | 793.2 ns | 12.24 ns | 11.45 ns | 780.4 ns | 817.7 ns | 1,260,711.2 | 0.1850 | 1 KB |
Filtered_Virtual_Classes | 794.4 ns | 5.50 ns | 5.40 ns | 786.0 ns | 803.7 ns | 1,258,778.4 | 0.1850 | 1 KB |
Large_Sealed_Classes | 3,524.2 ns | 30.85 ns | 24.09 ns | 3,498.9 ns | 3,570.1 ns | 283,755.7 | 0.4349 | 3 KB |
Filtered_Large_Sealed_Classes | 3,424.4 ns | 63.67 ns | 73.33 ns | 3,351.0 ns | 3,569.9 ns | 292,019.9 | 0.4311 | 3 KB |
Generic_Classes | 1,957.4 ns | 15.07 ns | 11.77 ns | 1,940.3 ns | 1,984.2 ns | 510,890.9 | 0.2174 | 1 KB |
Filtered_Generic_Classes | 2,006.1 ns | 40.09 ns | 52.13 ns | 1,952.1 ns | 2,088.5 ns | 498,485.9 | 0.2174 | 1 KB |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
Byte_Array | 231.1 ns | 2.49 ns | 2.21 ns | 228.4 ns | 235.7 ns | 4,326,807.4 | 0.0420 | 265 B |
String_Array | 1,210.5 ns | 6.86 ns | 6.08 ns | 1,203.1 ns | 1,223.7 ns | 826,091.5 | 0.0877 | 562 B |
Dictionary | 4,263.0 ns | 84.29 ns | 90.19 ns | 4,140.1 ns | 4,414.9 ns | 234,575.1 | 0.4044 | 2,576 B |
Array_List | 1,815.6 ns | 34.91 ns | 37.35 ns | 1,775.9 ns | 1,879.1 ns | 550,788.0 | 0.1926 | 1,220 B |
Linked_List | 8,469.4 ns | 120.07 ns | 112.31 ns | 8,315.0 ns | 8,655.3 ns | 118,072.2 | 0.8240 | 5,224 B |
Hash_Set | 10,528.1 ns | 89.51 ns | 74.75 ns | 10,418.4 ns | 10,645.7 ns | 94,984.1 | 1.0376 | 6,588 B |
Sorted_Set | 13,345.4 ns | 229.54 ns | 214.72 ns | 13,028.8 ns | 13,712.8 ns | 74,932.5 | 1.0986 | 6,950 B |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
Immutable_Array | 2.371 μs | 0.0148 μs | 0.0131 μs | 2.351 μs | 2.391 μs | 421,849.4 | 0.1869 | 1 KB |
Immutable_List | 3.222 μs | 0.0574 μs | 0.0537 μs | 3.167 μs | 3.316 μs | 310,354.2 | 0.2556 | 2 KB |
Immutable_Hash_Set | 5.612 μs | 0.0890 μs | 0.0832 μs | 5.498 μs | 5.758 μs | 178,200.1 | 0.2899 | 2 KB |
Immutable_Sorted_Set | 7.748 μs | 0.1137 μs | 0.1064 μs | 7.608 μs | 7.943 μs | 129,064.1 | 0.2899 | 2 KB |
Immutable_Dictionary | 7.414 μs | 0.0654 μs | 0.0546 μs | 7.350 μs | 7.511 μs | 134,880.8 | 0.4578 | 3 KB |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
Boolean | 120.4 ns | 1.06 ns | 0.94 ns | 118.4 ns | 121.4 ns | 8,303,298.4 | 0.0393 | 249 B |
Byte | 124.3 ns | 1.11 ns | 0.98 ns | 122.3 ns | 126.1 ns | 8,044,435.1 | 0.0393 | 249 B |
SByte | 117.5 ns | 1.20 ns | 1.00 ns | 115.5 ns | 119.5 ns | 8,512,004.3 | 0.0393 | 249 B |
Int16 | 150.8 ns | 1.80 ns | 1.69 ns | 147.9 ns | 153.7 ns | 6,632,940.8 | 0.0393 | 249 B |
UInt16 | 156.4 ns | 3.09 ns | 3.56 ns | 151.9 ns | 163.6 ns | 6,395,166.1 | 0.0393 | 249 B |
Int32 | 151.0 ns | 2.82 ns | 2.64 ns | 146.5 ns | 155.7 ns | 6,624,413.0 | 0.0393 | 249 B |
UInt32 | 156.4 ns | 3.07 ns | 3.01 ns | 152.0 ns | 161.6 ns | 6,392,948.2 | 0.0393 | 249 B |
Int64 | 166.3 ns | 3.21 ns | 3.82 ns | 161.3 ns | 174.7 ns | 6,014,889.7 | 0.0393 | 249 B |
UInt64 | 171.4 ns | 3.33 ns | 3.42 ns | 167.1 ns | 178.5 ns | 5,832,912.0 | 0.0393 | 249 B |
Single | 161.2 ns | 3.21 ns | 3.43 ns | 157.2 ns | 166.5 ns | 6,203,417.8 | 0.0393 | 249 B |
Double | 172.0 ns | 2.29 ns | 2.14 ns | 168.5 ns | 174.8 ns | 5,814,438.8 | 0.0393 | 249 B |
Decimal | 241.7 ns | 2.58 ns | 2.41 ns | 237.8 ns | 246.5 ns | 4,137,806.8 | 0.0544 | 345 B |
Guids | 170.1 ns | 3.38 ns | 5.26 ns | 164.1 ns | 182.0 ns | 5,877,948.8 | 0.0546 | 345 B |
DateTimes | 164.1 ns | 3.29 ns | 3.65 ns | 160.0 ns | 172.2 ns | 6,095,329.9 | 0.0393 | 249 B |
TimeSpan | 386.7 ns | 7.67 ns | 7.17 ns | 377.1 ns | 400.1 ns | 2,586,303.9 | 0.0887 | 562 B |
String | 370.7 ns | 5.12 ns | 4.54 ns | 362.6 ns | 380.7 ns | 2,697,777.0 | 0.1092 | 690 B |
Type | 7,916.7 ns | 146.35 ns | 136.90 ns | 7,677.3 ns | 8,145.2 ns | 126,315.3 | 1.4191 | 9,035 B |
Tuple1 | 812.6 ns | 15.02 ns | 14.05 ns | 799.0 ns | 840.3 ns | 1,230,609.6 | 0.0973 | 618 B |
Tuple2 | 1,236.7 ns | 7.00 ns | 5.47 ns | 1,228.4 ns | 1,245.1 ns | 808,611.6 | 0.1278 | 818 B |
Tuple3 | 1,547.2 ns | 29.53 ns | 32.82 ns | 1,504.4 ns | 1,596.3 ns | 646,329.5 | 0.1373 | 875 B |
Tuple4 | 9,660.2 ns | 189.78 ns | 194.89 ns | 9,393.6 ns | 9,966.9 ns | 103,517.3 | 1.5411 | 9,765 B |
Tuple5 | 10,129.8 ns | 133.90 ns | 118.70 ns | 9,901.4 ns | 10,331.7 ns | 98,718.7 | 1.5564 | 9,837 B |
Tuple6 | 10,490.1 ns | 173.39 ns | 162.19 ns | 10,264.8 ns | 10,750.8 ns | 95,327.8 | 1.5564 | 9,910 B |
Tuple7 | 11,310.9 ns | 156.42 ns | 146.31 ns | 11,039.8 ns | 11,568.7 ns | 88,410.0 | 1.6174 | 10,271 B |
Tuple8 | 12,629.2 ns | 243.04 ns | 227.34 ns | 12,327.3 ns | 13,078.1 ns | 79,181.9 | 1.7090 | 10,808 B |
ValueTuple1 | 423.6 ns | 8.45 ns | 8.68 ns | 413.5 ns | 439.2 ns | 2,360,791.7 | 0.0954 | 602 B |
ValueTuple2 | 651.4 ns | 12.39 ns | 12.73 ns | 633.7 ns | 674.5 ns | 1,535,244.0 | 0.1259 | 794 B |
ValueTuple3 | 709.0 ns | 5.10 ns | 4.77 ns | 701.9 ns | 714.8 ns | 1,410,477.1 | 0.1307 | 826 B |
ValueTuple4 | 8,497.8 ns | 102.35 ns | 95.74 ns | 8,380.3 ns | 8,701.3 ns | 117,678.1 | 1.5259 | 9,717 B |
ValueTuple5 | 8,622.0 ns | 113.39 ns | 100.51 ns | 8,492.6 ns | 8,875.3 ns | 115,982.4 | 1.5411 | 9,765 B |
ValueTuple6 | 9,018.5 ns | 86.38 ns | 80.80 ns | 8,880.1 ns | 9,147.8 ns | 110,882.9 | 1.5411 | 9,821 B |
ValueTuple7 | 9,469.8 ns | 95.34 ns | 84.52 ns | 9,274.2 ns | 9,571.8 ns | 105,598.8 | 1.6022 | 10,150 B |
ValueTuple8 | 9,940.9 ns | 179.31 ns | 167.72 ns | 9,748.3 ns | 10,335.3 ns | 100,594.6 | 1.6937 | 10,720 B |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
Enums | 389.6 ns | 4.01 ns | 3.75 ns | 382.7 ns | 395.4 ns | 2,566,596.1 | 0.0925 | 586 B |
Filtered_Enums | 388.7 ns | 2.92 ns | 2.28 ns | 384.1 ns | 391.8 ns | 2,572,678.2 | 0.0925 | 586 B |
Standard_Value_Types | 1,187.9 ns | 5.80 ns | 5.14 ns | 1,179.5 ns | 1,195.3 ns | 841,800.7 | 0.1163 | 738 B |
Filtered_Standard_Value_Types | 1,212.8 ns | 23.93 ns | 29.39 ns | 1,178.8 ns | 1,276.4 ns | 824,518.8 | 0.1163 | 738 B |
Blittable_Value_Types | 728.9 ns | 4.20 ns | 3.92 ns | 721.9 ns | 735.3 ns | 1,371,978.6 | 0.1001 | 634 B |
Filtered_Blittable_Value_Types | 733.7 ns | 3.48 ns | 2.72 ns | 729.5 ns | 739.9 ns | 1,363,010.5 | 0.1001 | 634 B |
Method | Mean | Error | StdDev | Min | Max | Op/s | Gen 0 | Allocated |
---|---|---|---|---|---|---|---|---|
DeserializeDanger | 22.61 μs | 0.059 μs | 0.055 μs | 22.52 μs | 22.72 μs | 44,224.7 | 0.3662 | 2 KB |
Fixes #303
Changes
Cache rejected types for optimizationChecklist
For significant changes, please ensure that the following have been completed (delete if not relevant):
Latest
dev
BenchmarksOnly running the full benchmark on net471 because it takes way too long to run it on all platforms
net471
netcoreapp3.1
net6.0
This PR's Benchmarks
Only running the full benchmark on net471 because it takes way too long to run it on all platforms
net471
netcoreapp3.1
net6.0