PersistentMap/PersistentMap/Benchmarks/gh.benchmarks.md

10 KiB


BenchmarkDotNet v0.15.8, Linux openSUSE Tumbleweed-Slowroll
AMD Ryzen 9 7900 3.02GHz, 1 CPU, 24 logical and 12 physical cores
.NET SDK 10.0.100
  [Host]     : .NET 10.0.0 (10.0.0, 10.0.25.52411), X64 RyuJIT x86-64-v4
  DefaultJob : .NET 10.0.0 (10.0.0, 10.0.25.52411), X64 RyuJIT x86-64-v4


Method Keysize CollectionSize Mean Error StdDev Ratio RatioSD Gen0 Gen1 Allocated Alloc Ratio
'Build: Sys.ImmutableDict' 10 1000 82,965.51 ns 1,541.386 ns 1,582.889 ns 6,986.62 146.96 3.7842 0.6104 64072 B NA
'Build: LangExt.HashMap' 10 1000 107,355.82 ns 1,551.663 ns 1,451.427 ns 9,040.55 148.52 17.2119 2.4414 289808 B NA
'Build: LangExt.SortedMap' 10 1000 228,660.43 ns 2,218.079 ns 1,852.196 ns 19,255.74 243.15 3.1738 0.4883 56088 B NA
'Build: PersistentMap (Iterative)' 10 1000 244,752.37 ns 2,794.335 ns 2,333.396 ns 20,610.86 278.75 138.1836 15.6250 2314008 B NA
'Build: PersistentMap (Transient)' 10 1000 86,370.48 ns 1,150.505 ns 1,076.183 ns 7,273.35 113.63 3.5400 0.3662 59624 B NA
'Lookup: Sys.ImmutableDict' 10 1000 11.88 ns 0.130 ns 0.122 ns 1.00 0.01 - - - NA
'Lookup: Sys.SortedDict' 10 1000 129.81 ns 1.686 ns 1.494 ns 10.93 0.16 - - - NA
'Lookup: LangExt.HashMap' 10 1000 24.52 ns 0.293 ns 0.274 ns 2.07 0.03 - - - NA
'Lookup: LangExt.SortedMap' 10 1000 202.85 ns 0.770 ns 0.682 ns 17.08 0.18 - - - NA
'Lookup: PersistentMap' 10 1000 25.24 ns 0.159 ns 0.148 ns 2.13 0.02 - - - NA
'Build: Sys.ImmutableDict' 100 1000 151,217.34 ns 1,687.298 ns 1,578.300 ns 2,930.42 31.69 3.6621 0.4883 64072 B NA
'Build: LangExt.HashMap' 100 1000 167,490.07 ns 2,525.502 ns 2,362.356 ns 3,245.77 46.06 17.3340 2.1973 293096 B NA
'Build: LangExt.SortedMap' 100 1000 228,731.62 ns 4,424.010 ns 4,733.641 ns 4,432.57 90.96 3.1738 0.4883 56088 B NA
'Build: PersistentMap (Iterative)' 100 1000 256,683.18 ns 2,564.193 ns 2,141.218 ns 4,974.24 44.31 138.1836 15.1367 2316904 B NA
'Build: PersistentMap (Transient)' 100 1000 87,260.94 ns 1,667.741 ns 1,712.648 ns 1,691.02 32.92 3.6621 0.3662 62520 B NA
'Lookup: Sys.ImmutableDict' 100 1000 51.60 ns 0.263 ns 0.205 ns 1.00 0.01 - - - NA
'Lookup: Sys.SortedDict' 100 1000 126.22 ns 0.747 ns 0.662 ns 2.45 0.02 - - - NA
'Lookup: LangExt.HashMap' 100 1000 65.88 ns 0.353 ns 0.295 ns 1.28 0.01 - - - NA
'Lookup: LangExt.SortedMap' 100 1000 168.63 ns 0.768 ns 0.718 ns 3.27 0.02 - - - NA
'Lookup: PersistentMap' 100 1000 26.67 ns 0.149 ns 0.132 ns 0.52 0.00 - - - NA
'Build: Sys.ImmutableDict' 1000 1000 858,405.87 ns 3,122.202 ns 2,437.610 ns 1,837.79 11.46 2.9297 - 64072 B NA
'Build: LangExt.HashMap' 1000 1000 712,616.81 ns 3,284.251 ns 2,742.498 ns 1,525.66 10.25 16.6016 1.9531 293600 B NA
'Build: LangExt.SortedMap' 1000 1000 227,785.60 ns 2,218.172 ns 1,966.352 ns 487.67 4.90 3.1738 0.4883 56088 B NA
'Build: PersistentMap (Iterative)' 1000 1000 249,242.56 ns 4,789.243 ns 7,313.681 ns 533.61 15.71 138.1836 14.6484 2312560 B NA
'Build: PersistentMap (Transient)' 1000 1000 85,297.82 ns 1,186.402 ns 990.700 ns 182.62 2.29 3.4180 0.2441 58176 B NA
'Lookup: Sys.ImmutableDict' 1000 1000 467.10 ns 3.062 ns 2.714 ns 1.00 0.01 - - - NA
'Lookup: Sys.SortedDict' 1000 1000 131.87 ns 1.521 ns 1.348 ns 0.28 0.00 - - - NA
'Lookup: LangExt.HashMap' 1000 1000 478.53 ns 2.786 ns 2.606 ns 1.02 0.01 - - - NA
'Lookup: LangExt.SortedMap' 1000 1000 151.49 ns 1.183 ns 1.049 ns 0.32 0.00 - - - NA
'Lookup: PersistentMap' 1000 1000 24.98 ns 0.209 ns 0.195 ns 0.05 0.00

Here are some better lookup benchmarks that do not just try to lookup the same index:

Method CollectionSize N Mean Error StdDev Allocated
'Cyclic: PersistentMap' 1024 10 26.68 ns 0.246 ns 0.230 ns -
'Cyclic: Sys.Sorted' 1024 10 153.12 ns 1.591 ns 1.410 ns -
'Cyclic: LangExt.HashMap' 1024 10 24.80 ns 0.140 ns 0.131 ns -
'Cyclic: LangExt.Sorted' 1024 10 180.45 ns 1.695 ns 1.415 ns -
'Cyclic: PersistentMap' 1024 100 27.09 ns 0.142 ns 0.126 ns -
'Cyclic: Sys.Sorted' 1024 100 154.13 ns 1.729 ns 1.444 ns -
'Cyclic: LangExt.HashMap' 1024 100 66.44 ns 0.501 ns 0.468 ns -
'Cyclic: LangExt.Sorted' 1024 100 180.61 ns 3.244 ns 3.034 ns -
'Cyclic: PersistentMap' 1024 1000 26.84 ns 0.131 ns 0.110 ns -
'Cyclic: Sys.Sorted' 1024 1000 171.48 ns 1.828 ns 1.710 ns -
'Cyclic: LangExt.HashMap' 1024 1000 497.32 ns 9.698 ns 9.071 ns -
'Cyclic: LangExt.Sorted' 1024 1000 180.88 ns 2.297 ns 1.918 ns -
'Cyclic: PersistentMap' 131072 10 103.80 ns 1.740 ns 1.628 ns -
'Cyclic: Sys.Sorted' 131072 10 459.04 ns 4.579 ns 4.283 ns -
'Cyclic: LangExt.HashMap' 131072 10 56.64 ns 0.654 ns 0.612 ns -
'Cyclic: LangExt.Sorted' 131072 10 525.38 ns 10.281 ns 11.840 ns -
'Cyclic: PersistentMap' 131072 100 118.92 ns 2.222 ns 2.967 ns -
'Cyclic: Sys.Sorted' 131072 100 552.77 ns 10.983 ns 12.648 ns -
'Cyclic: LangExt.HashMap' 131072 100 169.08 ns 1.478 ns 1.234 ns -
'Cyclic: LangExt.Sorted' 131072 100 588.64 ns 11.473 ns 11.782 ns -
'Cyclic: PersistentMap' 131072 1000 151.38 ns 1.432 ns 1.269 ns -
'Cyclic: Sys.Sorted' 131072 1000 606.19 ns 9.281 ns 8.228 ns -
'Cyclic: LangExt.HashMap' 131072 1000 732.79 ns 6.556 ns 5.812 ns -
'Cyclic: LangExt.Sorted' 131072 1000 653.56 ns 9.363 ns 8.300 ns -