Skip to content

Instantly share code, notes, and snippets.

@bellons91
Last active February 14, 2026 18:21
Show Gist options
  • Select an option

  • Save bellons91/6e1e639e1af5961051d95f65a8e5fcfd to your computer and use it in GitHub Desktop.

Select an option

Save bellons91/6e1e639e1af5961051d95f65a8e5fcfd to your computer and use it in GitHub Desktop.
ReadOnly vs Immutable vs Frozen collection benchmarks
Method Job AnalyzeLaunchVariance EvaluateOverhead MaxAbsoluteError MaxRelativeError MinInvokeCount MinIterationTime OutlierMode Affinity EnvironmentVariables Jit LargeAddressAware Platform PowerPlanMode Runtime AllowVeryLargeObjects Concurrent CpuGroups Force HeapAffinitizeMask HeapCount NoAffinitize RetainVm Server Arguments BuildConfiguration Clock EngineFactory NuGetReferences Toolchain IsMutator InvocationCount IterationCount IterationTime LaunchCount MaxIterationCount MaxWarmupIterationCount MemoryRandomization MinIterationCount MinWarmupIterationCount RunStrategy UnrollFactor WarmupCount N Mean Error StdDev Ratio RatioSD Rank Gen0 Gen1 Gen2 Allocated Alloc Ratio
'List index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 0.9278 ns 1.7275 ns 0.0947 ns 0.11 0.01 1 0.0000 0.0000 0.0000 0 B NA
'ReadOnlyCollection index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 0.9429 ns 1.3669 ns 0.0749 ns 0.12 0.01 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableArray index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 0.9507 ns 1.2508 ns 0.0686 ns 0.12 0.01 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableList index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 1.0329 ns 1.0362 ns 0.0568 ns 0.13 0.01 3 0.0000 0.0000 0.0000 0 B NA
'Hashset index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 8.2025 ns 2.9294 ns 0.1606 ns 1.00 0.00 4 0.0000 0.0000 0.0000 0 B NA
'ImmutableArray index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 0.7374 ns 0.3808 ns 0.0209 ns 0.02 0.00 1 0.0000 0.0000 0.0000 0 B NA
'List index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 0.9585 ns 0.7132 ns 0.0391 ns 0.02 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ReadOnlyCollection index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 1.0095 ns 1.1258 ns 0.0617 ns 0.03 0.00 3 0.0000 0.0000 0.0000 0 B NA
'ImmutableList index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 1.4785 ns 0.5936 ns 0.0325 ns 0.04 0.00 4 0.0000 0.0000 0.0000 0 B NA
'Hashset index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 38.7006 ns 4.0684 ns 0.2230 ns 1.00 0.00 5 0.0000 0.0000 0.0000 0 B NA
'ImmutableArray index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 0.7364 ns 0.9841 ns 0.0539 ns 0.002 0.00 1 0.0000 0.0000 0.0000 0 B NA
'List index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 0.9799 ns 1.1490 ns 0.0630 ns 0.003 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ReadOnlyCollection index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 0.9974 ns 0.8655 ns 0.0474 ns 0.003 0.00 3 0.0000 0.0000 0.0000 0 B NA
'ImmutableList index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 1.4309 ns 1.9841 ns 0.1088 ns 0.004 0.00 4 0.0000 0.0000 0.0000 0 B NA
'Hashset index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 353.2732 ns 70.6714 ns 3.8737 ns 1.000 0.00 5 0.0000 0.0000 0.0000 0 B NA
'ImmutableArray index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 0.7562 ns 0.6805 ns 0.0373 ns 0.000 0.00 1 0.0000 0.0000 0.0000 0 B NA
'ReadOnlyCollection index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 0.9635 ns 0.6772 ns 0.0371 ns 0.000 0.00 2 0.0000 0.0000 0.0000 0 B NA
'List index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 0.9801 ns 0.7409 ns 0.0406 ns 0.000 0.00 3 0.0000 0.0000 0.0000 0 B NA
'ImmutableList index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 1.3269 ns 0.5519 ns 0.0302 ns 0.000 0.00 4 0.0000 0.0000 0.0000 0 B NA
'Hashset index access (middle)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 3,662.3615 ns 1,254.6680 ns 68.7726 ns 1.000 0.00 5 0.0000 0.0000 0.0000 0 B NA
'Build ReadonlyDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 3.6705 ns 0.5668 ns 0.0311 ns 1.00 0.00 1 0.0064 0.0000 0.0000 40 B 1.00
'Build FrozenDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 453.9815 ns 54.9925 ns 3.0143 ns 123.69 0.58 2 0.2151 0.0000 0.0000 1352 B 33.80
'Build ImmutableDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 520.5665 ns 84.0835 ns 4.6089 ns 141.82 0.29 3 0.1287 0.0000 0.0000 808 B 20.20
'Build ReadonlyDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 3.8860 ns 0.5299 ns 0.0290 ns 1.00 0.00 1 0.0064 0.0000 0.0000 40 B 1.00
'Build FrozenDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 3,709.9799 ns 2,053.3477 ns 112.5509 ns 954.87 35.89 2 1.5869 0.0229 0.0000 9968 B 249.20
'Build ImmutableDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 6,036.0743 ns 1,318.0054 ns 72.2443 ns 1,553.42 30.00 3 1.0452 0.0229 0.0000 6568 B 164.20
'Build ReadonlyDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 3.9757 ns 3.8947 ns 0.2135 ns 1.00 0.00 1 0.0064 0.0000 0.0000 40 B 1.00
'Build FrozenDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 33,232.1208 ns 10,957.4730 ns 600.6161 ns 8,371.35 367.53 2 14.4043 1.5869 0.0000 90608 B 2,265.20
'Build ImmutableDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 133,669.2871 ns 7,230.8618 ns 396.3479 ns 33,690.09 1,921.84 3 10.0098 1.4648 0.0000 64168 B 1,604.20
'Build ReadonlyDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 3.9717 ns 0.6569 ns 0.0360 ns 1.00 0.00 1 0.0064 0.0000 0.0000 40 B 1.00
'Build FrozenDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 516,141.3249 ns 157,767.8101 ns 8,647.7860 ns 129,949.29 1,197.26 2 173.8281 144.5313 116.2109 847003 B 21,175.08
'Build ImmutableDictionary from Dictionary' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 2,059,534.8307 ns 549,544.5574 ns 30,122.3915 ns 518,594.40 10,193.58 3 101.5625 58.5938 0.0000 640171 B 16,004.27
'List to ReadOnlyCollection' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 3.4803 ns 1.1651 ns 0.0639 ns 1.00 0.00 1 0.0038 0.0000 0.0000 24 B 1.00
'Build ImmutableList from array' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 88.4492 ns 16.2250 ns 0.8893 ns 25.42 0.58 2 0.0802 0.0001 0.0000 504 B 21.00
'Build FrozenSet from HashSet' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 444.8004 ns 77.7502 ns 4.2617 ns 127.82 1.59 3 0.1950 0.0000 0.0000 1224 B 51.00
'List to ReadOnlyCollection' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 3.6373 ns 1.9686 ns 0.1079 ns 1.00 0.00 1 0.0038 0.0000 0.0000 24 B 1.00
'Build ImmutableList from array' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 802.8517 ns 110.1377 ns 6.0370 ns 220.86 6.91 2 0.7687 0.0134 0.0000 4824 B 201.00
'Build FrozenSet from HashSet' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 3,484.3878 ns 110.6370 ns 6.0644 ns 958.50 26.74 3 1.4534 0.0153 0.0000 9120 B 380.00
'List to ReadOnlyCollection' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 3.6246 ns 2.3256 ns 0.1275 ns 1.00 0.00 1 0.0038 0.0000 0.0000 24 B 1.00
'Build ImmutableList from array' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 9,667.5654 ns 1,593.7098 ns 87.3566 ns 2,668.85 69.91 2 7.6447 0.9613 0.0000 48024 B 2,001.00
'Build FrozenSet from HashSet' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 31,774.7030 ns 3,032.2156 ns 166.2060 ns 8,773.81 319.44 3 13.1226 0.0000 0.0000 82560 B 3,440.00
'List to ReadOnlyCollection' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 3.3767 ns 0.2402 ns 0.0132 ns 1.00 0.00 1 0.0038 0.0000 0.0000 24 B 1.00
'Build ImmutableList from array' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 102,208.3435 ns 9,569.1674 ns 524.5184 ns 30,269.52 231.74 2 76.4160 34.5459 0.0000 480024 B 20,001.00
'Build FrozenSet from HashSet' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 495,070.8496 ns 69,581.8711 ns 3,814.0171 ns 146,618.42 1,506.59 3 158.2031 132.3242 113.2813 766904 B 31,954.33
'FrozenSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 1.7451 ns 0.9090 ns 0.0498 ns 0.30 0.01 1 0.0000 0.0000 0.0000 0 B NA
'HashSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 5.8899 ns 1.2787 ns 0.0701 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableHashSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 6.9038 ns 1.5280 ns 0.0838 ns 1.17 0.02 3 0.0000 0.0000 0.0000 0 B NA
'FrozenSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 2.5355 ns 0.3187 ns 0.0175 ns 0.37 0.00 1 0.0000 0.0000 0.0000 0 B NA
'HashSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 6.9044 ns 0.8770 ns 0.0481 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableHashSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 9.9141 ns 0.5886 ns 0.0323 ns 1.44 0.01 3 0.0000 0.0000 0.0000 0 B NA
'FrozenSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 3.1470 ns 1.0721 ns 0.0588 ns 0.50 0.01 1 0.0000 0.0000 0.0000 0 B NA
'HashSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 6.3121 ns 0.4946 ns 0.0271 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableHashSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 12.3377 ns 2.0079 ns 0.1101 ns 1.95 0.03 3 0.0000 0.0000 0.0000 0 B NA
'FrozenSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 2.4166 ns 0.6417 ns 0.0352 ns 0.38 0.02 1 0.0000 0.0000 0.0000 0 B NA
'HashSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 6.4451 ns 6.8282 ns 0.3743 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableHashSet Contains (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 13.2918 ns 5.8766 ns 0.3221 ns 2.07 0.13 3 0.0000 0.0000 0.0000 0 B NA
'FrozenDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 1.9275 ns 0.5532 ns 0.0303 ns 0.54 0.02 1 0.0000 0.0000 0.0000 0 B NA
'ReadOnlyDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 3.4054 ns 0.8679 ns 0.0476 ns 0.96 0.05 2 0.0000 0.0000 0.0000 0 B NA
'Dictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 3.5528 ns 3.7964 ns 0.2081 ns 1.00 0.00 3 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 6.1793 ns 1.5878 ns 0.0870 ns 1.74 0.09 4 0.0000 0.0000 0.0000 0 B NA
'FrozenDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 2.8611 ns 0.7966 ns 0.0437 ns 0.61 0.01 1 0.0000 0.0000 0.0000 0 B NA
'Dictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 4.6597 ns 0.5848 ns 0.0321 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ReadOnlyDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 5.2570 ns 2.4721 ns 0.1355 ns 1.13 0.03 3 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 8.0810 ns 2.7457 ns 0.1505 ns 1.73 0.04 4 0.0000 0.0000 0.0000 0 B NA
'FrozenDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 3.7073 ns 2.3110 ns 0.1267 ns 0.92 0.03 1 0.0000 0.0000 0.0000 0 B NA
'Dictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 4.0466 ns 0.8573 ns 0.0470 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ReadOnlyDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 4.4725 ns 1.3007 ns 0.0713 ns 1.11 0.01 3 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 9.2980 ns 2.2123 ns 0.1213 ns 2.30 0.06 4 0.0000 0.0000 0.0000 0 B NA
'FrozenDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 2.8559 ns 0.9677 ns 0.0530 ns 0.69 0.02 1 0.0000 0.0000 0.0000 0 B NA
'Dictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 4.1378 ns 0.9485 ns 0.0520 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ReadOnlyDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 4.2453 ns 0.6164 ns 0.0338 ns 1.03 0.01 3 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary TryGetValue (existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 11.6684 ns 1.5330 ns 0.0840 ns 2.82 0.05 4 0.0000 0.0000 0.0000 0 B NA
'FrozenDictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 0.3435 ns 0.2157 ns 0.0118 ns 0.10 0.00 1 0.0000 0.0000 0.0000 0 B NA
'Dictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 3.5900 ns 0.8578 ns 0.0470 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 9.7884 ns 1.3586 ns 0.0745 ns 2.73 0.02 3 0.0000 0.0000 0.0000 0 B NA
'FrozenDictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 0.4342 ns 0.2528 ns 0.0139 ns 0.09 0.00 1 0.0000 0.0000 0.0000 0 B NA
'Dictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 4.7964 ns 0.4063 ns 0.0223 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 11.4459 ns 1.5753 ns 0.0863 ns 2.39 0.01 3 0.0000 0.0000 0.0000 0 B NA
'FrozenDictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 0.3963 ns 0.6522 ns 0.0357 ns 0.11 0.01 1 0.0000 0.0000 0.0000 0 B NA
'Dictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 3.7334 ns 0.7247 ns 0.0397 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 12.3883 ns 0.9299 ns 0.0510 ns 3.32 0.04 3 0.0000 0.0000 0.0000 0 B NA
'FrozenDictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 0.5266 ns 1.0227 ns 0.0561 ns 0.13 0.01 1 0.0000 0.0000 0.0000 0 B NA
'Dictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 4.0473 ns 0.4483 ns 0.0246 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary TryGetValue (missing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 13.1921 ns 4.9175 ns 0.2695 ns 3.26 0.05 3 0.0000 0.0000 0.0000 0 B NA
'FrozenSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 0.9128 ns 0.1928 ns 0.0106 ns 0.19 0.00 1 0.0000 0.0000 0.0000 0 B NA
'HashSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 4.9264 ns 0.5890 ns 0.0323 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableHashSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 9.3023 ns 1.8824 ns 0.1032 ns 1.89 0.03 3 0.0000 0.0000 0.0000 0 B NA
'FrozenSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 0.8450 ns 0.2892 ns 0.0159 ns 0.15 0.00 1 0.0000 0.0000 0.0000 0 B NA
'HashSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 5.8212 ns 1.9378 ns 0.1062 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableHashSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 11.3568 ns 5.0529 ns 0.2770 ns 1.95 0.05 3 0.0000 0.0000 0.0000 0 B NA
'FrozenSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 0.8135 ns 0.0605 ns 0.0033 ns 0.16 0.01 1 0.0000 0.0000 0.0000 0 B NA
'HashSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 5.1289 ns 3.8077 ns 0.2087 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableHashSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 12.3162 ns 3.8955 ns 0.2135 ns 2.40 0.11 3 0.0000 0.0000 0.0000 0 B NA
'FrozenSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 0.6459 ns 0.5066 ns 0.0278 ns 0.12 0.01 1 0.0000 0.0000 0.0000 0 B NA
'HashSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 5.3123 ns 1.0285 ns 0.0564 ns 1.00 0.00 2 0.0000 0.0000 0.0000 0 B NA
'ImmutableHashSet Contains (non-existing)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 13.8555 ns 2.7930 ns 0.1531 ns 2.61 0.06 3 0.0000 0.0000 0.0000 0 B NA
'Dictionary update in-place' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 8.1697 ns 5.6596 ns 0.3102 ns 1.00 0.00 1 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary SetItem (creates new)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 67.7431 ns 17.7522 ns 0.9731 ns 8.30 0.37 2 0.0370 0.0000 0.0000 232 B NA
'FrozenDictionary 'update' (rebuild)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10 551.6185 ns 310.9433 ns 17.0438 ns 67.55 2.21 3 0.2928 0.0000 0.0000 1840 B NA
'Dictionary update in-place' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 10.9811 ns 2.4203 ns 0.1327 ns 1.00 0.00 1 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary SetItem (creates new)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 112.0524 ns 15.0082 ns 0.8226 ns 10.21 0.20 2 0.0675 0.0000 0.0000 424 B NA
'FrozenDictionary 'update' (rebuild)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 100 4,029.6183 ns 681.7027 ns 37.3664 ns 367.02 7.26 3 2.0905 0.0305 0.0000 13144 B NA
'Dictionary update in-place' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 9.6840 ns 2.5193 ns 0.1381 ns 1.00 0.00 1 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary SetItem (creates new)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 164.4658 ns 27.2139 ns 1.4917 ns 16.99 0.28 2 0.0980 0.0000 0.0000 616 B NA
'FrozenDictionary 'update' (rebuild)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 1000 37,609.2306 ns 4,652.2680 ns 255.0065 ns 3,883.91 28.83 3 19.3481 2.1362 0.0000 121672 B NA
'Dictionary update in-place' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 9.7677 ns 1.5672 ns 0.0859 ns 1.00 0.00 1 0.0000 0.0000 0.0000 0 B NA
'ImmutableDictionary SetItem (creates new)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 213.5151 ns 17.4067 ns 0.9541 ns 21.86 0.09 2 0.1287 0.0000 0.0000 808 B NA
'FrozenDictionary 'update' (rebuild)' ShortRun False Default Default Default Default Default Default 111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 10.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default 3 Default 1 Default Default Default Default Default Default 16 3 10000 605,496.2891 ns 333,162.0393 ns 18,261.7356 ns 61,989.69 1,767.68 3 230.4688 195.3125 166.0156 1130445 B NA

BenchmarkDotNet v0.13.11, Windows 11 (10.0.26200.7623)
13th Gen Intel Core i7-1355U, 1 CPU, 12 logical and 10 physical cores
.NET SDK 10.0.103
  [Host]   : .NET 10.0.3 (10.0.326.7603), X64 RyuJIT AVX2
  ShortRun : .NET 10.0.3 (10.0.326.7603), X64 RyuJIT AVX2

Job=ShortRun  IterationCount=3  LaunchCount=1  
WarmupCount=3  

Method N Mean Error StdDev Ratio RatioSD Rank Gen0 Gen1 Gen2 Allocated Alloc Ratio
List index access (middle) 10 0.9278 ns 1.7275 ns 0.0947 ns 0.11 0.01 1 - - - - NA
ReadOnlyCollection index access (middle) 10 0.9429 ns 1.3669 ns 0.0749 ns 0.12 0.01 2 - - - - NA
ImmutableArray index access (middle) 10 0.9507 ns 1.2508 ns 0.0686 ns 0.12 0.01 2 - - - - NA
ImmutableList index access (middle) 10 1.0329 ns 1.0362 ns 0.0568 ns 0.13 0.01 3 - - - - NA
Hashset index access (middle) 10 8.2025 ns 2.9294 ns 0.1606 ns 1.00 0.00 4 - - - - NA
ImmutableArray index access (middle) 100 0.7374 ns 0.3808 ns 0.0209 ns 0.02 0.00 1 - - - - NA
List index access (middle) 100 0.9585 ns 0.7132 ns 0.0391 ns 0.02 0.00 2 - - - - NA
ReadOnlyCollection index access (middle) 100 1.0095 ns 1.1258 ns 0.0617 ns 0.03 0.00 3 - - - - NA
ImmutableList index access (middle) 100 1.4785 ns 0.5936 ns 0.0325 ns 0.04 0.00 4 - - - - NA
Hashset index access (middle) 100 38.7006 ns 4.0684 ns 0.2230 ns 1.00 0.00 5 - - - - NA
ImmutableArray index access (middle) 1000 0.7364 ns 0.9841 ns 0.0539 ns 0.002 0.00 1 - - - - NA
List index access (middle) 1000 0.9799 ns 1.1490 ns 0.0630 ns 0.003 0.00 2 - - - - NA
ReadOnlyCollection index access (middle) 1000 0.9974 ns 0.8655 ns 0.0474 ns 0.003 0.00 3 - - - - NA
ImmutableList index access (middle) 1000 1.4309 ns 1.9841 ns 0.1088 ns 0.004 0.00 4 - - - - NA
Hashset index access (middle) 1000 353.2732 ns 70.6714 ns 3.8737 ns 1.000 0.00 5 - - - - NA
ImmutableArray index access (middle) 10000 0.7562 ns 0.6805 ns 0.0373 ns 0.000 0.00 1 - - - - NA
ReadOnlyCollection index access (middle) 10000 0.9635 ns 0.6772 ns 0.0371 ns 0.000 0.00 2 - - - - NA
List index access (middle) 10000 0.9801 ns 0.7409 ns 0.0406 ns 0.000 0.00 3 - - - - NA
ImmutableList index access (middle) 10000 1.3269 ns 0.5519 ns 0.0302 ns 0.000 0.00 4 - - - - NA
Hashset index access (middle) 10000 3,662.3615 ns 1,254.6680 ns 68.7726 ns 1.000 0.00 5 - - - - NA
Build ReadonlyDictionary from Dictionary 10 3.6705 ns 0.5668 ns 0.0311 ns 1.00 0.00 1 0.0064 - - 40 B 1.00
Build FrozenDictionary from Dictionary 10 453.9815 ns 54.9925 ns 3.0143 ns 123.69 0.58 2 0.2151 - - 1352 B 33.80
Build ImmutableDictionary from Dictionary 10 520.5665 ns 84.0835 ns 4.6089 ns 141.82 0.29 3 0.1287 - - 808 B 20.20
Build ReadonlyDictionary from Dictionary 100 3.8860 ns 0.5299 ns 0.0290 ns 1.00 0.00 1 0.0064 - - 40 B 1.00
Build FrozenDictionary from Dictionary 100 3,709.9799 ns 2,053.3477 ns 112.5509 ns 954.87 35.89 2 1.5869 0.0229 - 9968 B 249.20
Build ImmutableDictionary from Dictionary 100 6,036.0743 ns 1,318.0054 ns 72.2443 ns 1,553.42 30.00 3 1.0452 0.0229 - 6568 B 164.20
Build ReadonlyDictionary from Dictionary 1000 3.9757 ns 3.8947 ns 0.2135 ns 1.00 0.00 1 0.0064 - - 40 B 1.00
Build FrozenDictionary from Dictionary 1000 33,232.1208 ns 10,957.4730 ns 600.6161 ns 8,371.35 367.53 2 14.4043 1.5869 - 90608 B 2,265.20
Build ImmutableDictionary from Dictionary 1000 133,669.2871 ns 7,230.8618 ns 396.3479 ns 33,690.09 1,921.84 3 10.0098 1.4648 - 64168 B 1,604.20
Build ReadonlyDictionary from Dictionary 10000 3.9717 ns 0.6569 ns 0.0360 ns 1.00 0.00 1 0.0064 - - 40 B 1.00
Build FrozenDictionary from Dictionary 10000 516,141.3249 ns 157,767.8101 ns 8,647.7860 ns 129,949.29 1,197.26 2 173.8281 144.5313 116.2109 847003 B 21,175.08
Build ImmutableDictionary from Dictionary 10000 2,059,534.8307 ns 549,544.5574 ns 30,122.3915 ns 518,594.40 10,193.58 3 101.5625 58.5938 - 640171 B 16,004.27
List to ReadOnlyCollection 10 3.4803 ns 1.1651 ns 0.0639 ns 1.00 0.00 1 0.0038 - - 24 B 1.00
Build ImmutableList from array 10 88.4492 ns 16.2250 ns 0.8893 ns 25.42 0.58 2 0.0802 0.0001 - 504 B 21.00
Build FrozenSet from HashSet 10 444.8004 ns 77.7502 ns 4.2617 ns 127.82 1.59 3 0.1950 - - 1224 B 51.00
List to ReadOnlyCollection 100 3.6373 ns 1.9686 ns 0.1079 ns 1.00 0.00 1 0.0038 - - 24 B 1.00
Build ImmutableList from array 100 802.8517 ns 110.1377 ns 6.0370 ns 220.86 6.91 2 0.7687 0.0134 - 4824 B 201.00
Build FrozenSet from HashSet 100 3,484.3878 ns 110.6370 ns 6.0644 ns 958.50 26.74 3 1.4534 0.0153 - 9120 B 380.00
List to ReadOnlyCollection 1000 3.6246 ns 2.3256 ns 0.1275 ns 1.00 0.00 1 0.0038 - - 24 B 1.00
Build ImmutableList from array 1000 9,667.5654 ns 1,593.7098 ns 87.3566 ns 2,668.85 69.91 2 7.6447 0.9613 - 48024 B 2,001.00
Build FrozenSet from HashSet 1000 31,774.7030 ns 3,032.2156 ns 166.2060 ns 8,773.81 319.44 3 13.1226 - - 82560 B 3,440.00
List to ReadOnlyCollection 10000 3.3767 ns 0.2402 ns 0.0132 ns 1.00 0.00 1 0.0038 - - 24 B 1.00
Build ImmutableList from array 10000 102,208.3435 ns 9,569.1674 ns 524.5184 ns 30,269.52 231.74 2 76.4160 34.5459 - 480024 B 20,001.00
Build FrozenSet from HashSet 10000 495,070.8496 ns 69,581.8711 ns 3,814.0171 ns 146,618.42 1,506.59 3 158.2031 132.3242 113.2813 766904 B 31,954.33
FrozenSet Contains (existing) 10 1.7451 ns 0.9090 ns 0.0498 ns 0.30 0.01 1 - - - - NA
HashSet Contains (existing) 10 5.8899 ns 1.2787 ns 0.0701 ns 1.00 0.00 2 - - - - NA
ImmutableHashSet Contains (existing) 10 6.9038 ns 1.5280 ns 0.0838 ns 1.17 0.02 3 - - - - NA
FrozenSet Contains (existing) 100 2.5355 ns 0.3187 ns 0.0175 ns 0.37 0.00 1 - - - - NA
HashSet Contains (existing) 100 6.9044 ns 0.8770 ns 0.0481 ns 1.00 0.00 2 - - - - NA
ImmutableHashSet Contains (existing) 100 9.9141 ns 0.5886 ns 0.0323 ns 1.44 0.01 3 - - - - NA
FrozenSet Contains (existing) 1000 3.1470 ns 1.0721 ns 0.0588 ns 0.50 0.01 1 - - - - NA
HashSet Contains (existing) 1000 6.3121 ns 0.4946 ns 0.0271 ns 1.00 0.00 2 - - - - NA
ImmutableHashSet Contains (existing) 1000 12.3377 ns 2.0079 ns 0.1101 ns 1.95 0.03 3 - - - - NA
FrozenSet Contains (existing) 10000 2.4166 ns 0.6417 ns 0.0352 ns 0.38 0.02 1 - - - - NA
HashSet Contains (existing) 10000 6.4451 ns 6.8282 ns 0.3743 ns 1.00 0.00 2 - - - - NA
ImmutableHashSet Contains (existing) 10000 13.2918 ns 5.8766 ns 0.3221 ns 2.07 0.13 3 - - - - NA
FrozenDictionary TryGetValue (existing) 10 1.9275 ns 0.5532 ns 0.0303 ns 0.54 0.02 1 - - - - NA
ReadOnlyDictionary TryGetValue (existing) 10 3.4054 ns 0.8679 ns 0.0476 ns 0.96 0.05 2 - - - - NA
Dictionary TryGetValue (existing) 10 3.5528 ns 3.7964 ns 0.2081 ns 1.00 0.00 3 - - - - NA
ImmutableDictionary TryGetValue (existing) 10 6.1793 ns 1.5878 ns 0.0870 ns 1.74 0.09 4 - - - - NA
FrozenDictionary TryGetValue (existing) 100 2.8611 ns 0.7966 ns 0.0437 ns 0.61 0.01 1 - - - - NA
Dictionary TryGetValue (existing) 100 4.6597 ns 0.5848 ns 0.0321 ns 1.00 0.00 2 - - - - NA
ReadOnlyDictionary TryGetValue (existing) 100 5.2570 ns 2.4721 ns 0.1355 ns 1.13 0.03 3 - - - - NA
ImmutableDictionary TryGetValue (existing) 100 8.0810 ns 2.7457 ns 0.1505 ns 1.73 0.04 4 - - - - NA
FrozenDictionary TryGetValue (existing) 1000 3.7073 ns 2.3110 ns 0.1267 ns 0.92 0.03 1 - - - - NA
Dictionary TryGetValue (existing) 1000 4.0466 ns 0.8573 ns 0.0470 ns 1.00 0.00 2 - - - - NA
ReadOnlyDictionary TryGetValue (existing) 1000 4.4725 ns 1.3007 ns 0.0713 ns 1.11 0.01 3 - - - - NA
ImmutableDictionary TryGetValue (existing) 1000 9.2980 ns 2.2123 ns 0.1213 ns 2.30 0.06 4 - - - - NA
FrozenDictionary TryGetValue (existing) 10000 2.8559 ns 0.9677 ns 0.0530 ns 0.69 0.02 1 - - - - NA
Dictionary TryGetValue (existing) 10000 4.1378 ns 0.9485 ns 0.0520 ns 1.00 0.00 2 - - - - NA
ReadOnlyDictionary TryGetValue (existing) 10000 4.2453 ns 0.6164 ns 0.0338 ns 1.03 0.01 3 - - - - NA
ImmutableDictionary TryGetValue (existing) 10000 11.6684 ns 1.5330 ns 0.0840 ns 2.82 0.05 4 - - - - NA
FrozenDictionary TryGetValue (missing) 10 0.3435 ns 0.2157 ns 0.0118 ns 0.10 0.00 1 - - - - NA
Dictionary TryGetValue (missing) 10 3.5900 ns 0.8578 ns 0.0470 ns 1.00 0.00 2 - - - - NA
ImmutableDictionary TryGetValue (missing) 10 9.7884 ns 1.3586 ns 0.0745 ns 2.73 0.02 3 - - - - NA
FrozenDictionary TryGetValue (missing) 100 0.4342 ns 0.2528 ns 0.0139 ns 0.09 0.00 1 - - - - NA
Dictionary TryGetValue (missing) 100 4.7964 ns 0.4063 ns 0.0223 ns 1.00 0.00 2 - - - - NA
ImmutableDictionary TryGetValue (missing) 100 11.4459 ns 1.5753 ns 0.0863 ns 2.39 0.01 3 - - - - NA
FrozenDictionary TryGetValue (missing) 1000 0.3963 ns 0.6522 ns 0.0357 ns 0.11 0.01 1 - - - - NA
Dictionary TryGetValue (missing) 1000 3.7334 ns 0.7247 ns 0.0397 ns 1.00 0.00 2 - - - - NA
ImmutableDictionary TryGetValue (missing) 1000 12.3883 ns 0.9299 ns 0.0510 ns 3.32 0.04 3 - - - - NA
FrozenDictionary TryGetValue (missing) 10000 0.5266 ns 1.0227 ns 0.0561 ns 0.13 0.01 1 - - - - NA
Dictionary TryGetValue (missing) 10000 4.0473 ns 0.4483 ns 0.0246 ns 1.00 0.00 2 - - - - NA
ImmutableDictionary TryGetValue (missing) 10000 13.1921 ns 4.9175 ns 0.2695 ns 3.26 0.05 3 - - - - NA
FrozenSet Contains (non-existing) 10 0.9128 ns 0.1928 ns 0.0106 ns 0.19 0.00 1 - - - - NA
HashSet Contains (non-existing) 10 4.9264 ns 0.5890 ns 0.0323 ns 1.00 0.00 2 - - - - NA
ImmutableHashSet Contains (non-existing) 10 9.3023 ns 1.8824 ns 0.1032 ns 1.89 0.03 3 - - - - NA
FrozenSet Contains (non-existing) 100 0.8450 ns 0.2892 ns 0.0159 ns 0.15 0.00 1 - - - - NA
HashSet Contains (non-existing) 100 5.8212 ns 1.9378 ns 0.1062 ns 1.00 0.00 2 - - - - NA
ImmutableHashSet Contains (non-existing) 100 11.3568 ns 5.0529 ns 0.2770 ns 1.95 0.05 3 - - - - NA
FrozenSet Contains (non-existing) 1000 0.8135 ns 0.0605 ns 0.0033 ns 0.16 0.01 1 - - - - NA
HashSet Contains (non-existing) 1000 5.1289 ns 3.8077 ns 0.2087 ns 1.00 0.00 2 - - - - NA
ImmutableHashSet Contains (non-existing) 1000 12.3162 ns 3.8955 ns 0.2135 ns 2.40 0.11 3 - - - - NA
FrozenSet Contains (non-existing) 10000 0.6459 ns 0.5066 ns 0.0278 ns 0.12 0.01 1 - - - - NA
HashSet Contains (non-existing) 10000 5.3123 ns 1.0285 ns 0.0564 ns 1.00 0.00 2 - - - - NA
ImmutableHashSet Contains (non-existing) 10000 13.8555 ns 2.7930 ns 0.1531 ns 2.61 0.06 3 - - - - NA
Dictionary update in-place 10 8.1697 ns 5.6596 ns 0.3102 ns 1.00 0.00 1 - - - - NA
ImmutableDictionary SetItem (creates new) 10 67.7431 ns 17.7522 ns 0.9731 ns 8.30 0.37 2 0.0370 - - 232 B NA
FrozenDictionary update (rebuild) 10 551.6185 ns 310.9433 ns 17.0438 ns 67.55 2.21 3 0.2928 - - 1840 B NA
Dictionary update in-place 100 10.9811 ns 2.4203 ns 0.1327 ns 1.00 0.00 1 - - - - NA
ImmutableDictionary SetItem (creates new) 100 112.0524 ns 15.0082 ns 0.8226 ns 10.21 0.20 2 0.0675 - - 424 B NA
FrozenDictionary update (rebuild) 100 4,029.6183 ns 681.7027 ns 37.3664 ns 367.02 7.26 3 2.0905 0.0305 - 13144 B NA
Dictionary update in-place 1000 9.6840 ns 2.5193 ns 0.1381 ns 1.00 0.00 1 - - - - NA
ImmutableDictionary SetItem (creates new) 1000 164.4658 ns 27.2139 ns 1.4917 ns 16.99 0.28 2 0.0980 - - 616 B NA
FrozenDictionary update (rebuild) 1000 37,609.2306 ns 4,652.2680 ns 255.0065 ns 3,883.91 28.83 3 19.3481 2.1362 - 121672 B NA
Dictionary update in-place 10000 9.7677 ns 1.5672 ns 0.0859 ns 1.00 0.00 1 - - - - NA
ImmutableDictionary SetItem (creates new) 10000 213.5151 ns 17.4067 ns 0.9541 ns 21.86 0.09 2 0.1287 - - 808 B NA
FrozenDictionary update (rebuild) 10000 605,496.2891 ns 333,162.0393 ns 18,261.7356 ns 61,989.69 1,767.68 3 230.4688 195.3125 166.0156 1130445 B NA
[MemoryDiagnoser]
[Orderer(SummaryOrderPolicy.FastestToSlowest)]
[GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByCategory)]
[RankColumn]
[ShortRunJob]
[KeepBenchmarkFiles]
[HtmlExporter]
[MarkdownExporterAttribute.Default]
[MarkdownExporterAttribute.GitHub]
public class ReadonlyVsImmutableVsFrozen
{
//[Params(10, 12)]
[Params(10, 100, 1_000, 10_000)]
public int N;
private string[] _gameNames = default!;
// List-ish
private List<string> _list = default!;
private ReadOnlyCollection<string> _readOnlyCollection = default!;
private IReadOnlyList<string> _iReadOnlyList = default!;
private ImmutableArray<string> _immutableArray;
private ImmutableList<string> _immutableList = default!;
// Set-ish
private HashSet<string> _hashSet = default!;
private ImmutableHashSet<string> _immutableHashSet = default!;
private FrozenSet<string> _frozenSet = default!;
// Dictionary-ish: "game -> BGG weight-ish score"
private Dictionary<string, int> _dict = default!;
private ReadOnlyDictionary<string, int> _readOnlyDict = default!;
private ImmutableDictionary<string, int> _immutableDict = default!;
private FrozenDictionary<string, int> _frozenDict = default!;
private string _existingKey = default!;
private string _missingKey = default!;
[GlobalSetup]
public void Setup()
{
_gameNames = new string[N];
for (int i = 0; i < N; i++)
_gameNames[i] = $"Game-{i:000000}";
_existingKey = _gameNames[N / 2];
_missingKey = "Game-DOES-NOT-EXIST";
// List-ish
_list = new List<string>(_gameNames);
_readOnlyCollection = _list.AsReadOnly();
_iReadOnlyList = _readOnlyCollection; // same underlying wrapper
_immutableArray = ImmutableArray.Create(_gameNames);
_immutableList = ImmutableList.Create(_gameNames);
// Set-ish
_hashSet = new HashSet<string>(_gameNames, StringComparer.Ordinal);
_immutableHashSet = _hashSet.ToImmutableHashSet(StringComparer.Ordinal);
_frozenSet = _hashSet.ToFrozenSet(StringComparer.Ordinal);
// Dictionary-ish
_dict = new Dictionary<string, int>(N, StringComparer.Ordinal);
for (int i = 0; i < N; i++)
_dict[_gameNames[i]] = (i % 5) + 1; // 1..5
_readOnlyDict = new ReadOnlyDictionary<string, int>(_dict);
_immutableDict = _dict.ToImmutableDictionary(StringComparer.Ordinal);
_frozenDict = _dict.ToFrozenDictionary(StringComparer.Ordinal);
}
// -------------------------
// Build cost (one-time)
// -------------------------
#region Creation of collection
[Benchmark(Description = "List to ReadOnlyCollection", Baseline = true)
, BenchmarkCategory("Creation of collection")]
public ReadOnlyCollection<string> Build_ReadOnlyCollection()
=> _list.AsReadOnly();
[Benchmark(Description = "Build ImmutableList from array")
, BenchmarkCategory("Creation of collection")]
public ImmutableList<string> Build_ImmutableList()
=> ImmutableList.Create(_gameNames);
[Benchmark(Description = "Build FrozenSet from HashSet")
, BenchmarkCategory("Creation of collection")]
public FrozenSet<string> Build_FrozenSet()
=> _hashSet.ToFrozenSet(StringComparer.Ordinal);
#endregion
#region Creation of Dictionary
[Benchmark(Description = "Build ReadonlyDictionary from Dictionary", Baseline =true),
BenchmarkCategory("Creation of Dictionary")]
public ReadOnlyDictionary<string, int> Build_ReadOnlyDictionary()
=> new ReadOnlyDictionary<string, int>(_dict);
[Benchmark(Description = "Build ImmutableDictionary from Dictionary"),
BenchmarkCategory("Creation of Dictionary")]
public ImmutableDictionary<string, int> Build_ImmutableDictionary()
=> _dict.ToImmutableDictionary(StringComparer.Ordinal);
[Benchmark(Description = "Build FrozenDictionary from Dictionary")
, BenchmarkCategory("Creation of Dictionary")]
public FrozenDictionary<string, int> Build_FrozenDictionary()
=> _dict.ToFrozenDictionary(StringComparer.Ordinal);
#endregion
// -------------------------
// Read performance
// -------------------------
#region Access by index
[Benchmark(Description = "List index access (middle)")
, BenchmarkCategory("Access by index")]
public string Read_List_Index()
=> _list[N / 2];
[Benchmark(Description = "ReadOnlyCollection index access (middle)")
, BenchmarkCategory("Access by index")]
public string Read_ReadOnlyCollection_Index()
=> _readOnlyCollection[N / 2];
[Benchmark(Description = "ImmutableArray index access (middle)")
, BenchmarkCategory("Access by index")]
public string Read_ImmutableArray_Index()
=> _immutableArray[N / 2];
[Benchmark(Description = "ImmutableList index access (middle)")
, BenchmarkCategory("Access by index")]
public string Read_ImmutableList_Index()
=> _immutableList[N / 2];
[Benchmark(Description = "Hashset index access (middle)", Baseline =true)
, BenchmarkCategory("Access by index")]
public string Read_HashSet_Index()
=> _hashSet.ElementAt(N / 2);
#endregion Access by index
#region Contains existing key
[Benchmark(Description = "HashSet Contains (existing)", Baseline =true)
, BenchmarkCategory("Search existing key")]
public bool Read_HashSet_Contains_Existing()
=> _hashSet.Contains(_existingKey);
[Benchmark(Description = "ImmutableHashSet Contains (existing)")
, BenchmarkCategory("Search existing key")]
public bool Read_ImmutableHashSet_Contains_Existing()
=> _immutableHashSet.Contains(_existingKey);
[Benchmark(Description = "FrozenSet Contains (existing)")
, BenchmarkCategory("Search existing key")]
public bool Read_FrozenSet_Contains_Existing()
=> _frozenSet.Contains(_existingKey);
#endregion
#region Contains non existing key
[Benchmark(Description = "HashSet Contains (non-existing)", Baseline = true)
, BenchmarkCategory("Search non-existing key")]
public bool Read_HashSet_Contains_NonExisting()
=> _hashSet.Contains(_missingKey);
[Benchmark(Description = "ImmutableHashSet Contains (non-existing)")
, BenchmarkCategory("Search non-existing key")]
public bool Read_ImmutableHashSet_Contains_NonExisting()
=> _immutableHashSet.Contains(_missingKey);
[Benchmark(Description = "FrozenSet Contains (non-existing)")
, BenchmarkCategory("Search non-existing key")]
public bool Read_FrozenSet_Contains_NonExisting()
=> _frozenSet.Contains(_missingKey);
#endregion
#region Search existing key in dictionary
[Benchmark(Description = "Dictionary TryGetValue (existing)", Baseline =true)
, BenchmarkCategory("Search existing key in dictionary")]
public int Read_Dictionary_TryGetValue_Existing()
=> _dict.TryGetValue(_existingKey, out var v) ? v : 0;
[Benchmark(Description = "ReadOnlyDictionary TryGetValue (existing)")
, BenchmarkCategory("Search existing key in dictionary")]
public int Read_ReadOnlyDictionary_TryGetValue_Existing()
=> _readOnlyDict.TryGetValue(_existingKey, out var v) ? v : 0;
[Benchmark(Description = "ImmutableDictionary TryGetValue (existing)")
, BenchmarkCategory("Search existing key in dictionary")]
public int Read_ImmutableDictionary_TryGetValue_Existing()
=> _immutableDict.TryGetValue(_existingKey, out var v) ? v : 0;
[Benchmark(Description = "FrozenDictionary TryGetValue (existing)")
, BenchmarkCategory("Search existing key in dictionary")]
public int Read_FrozenDictionary_TryGetValue_Existing()
=> _frozenDict.TryGetValue(_existingKey, out var v) ? v : 0;
#endregion
// -------------------------
// Miss performance (lookup negative case)
// -------------------------
[Benchmark(Description = "Dictionary TryGetValue (missing)", Baseline = true)
, BenchmarkCategory("Search missing key")]
public int Read_Dictionary_TryGetValue_Missing()
=> _dict.TryGetValue(_missingKey, out var v) ? v : 0;
[Benchmark(Description = "ImmutableDictionary TryGetValue (missing)")
, BenchmarkCategory("Search missing key")]
public int Read_ImmutableDictionary_TryGetValue_Missing()
=> _immutableDict.TryGetValue(_missingKey, out var v) ? v : 0;
[Benchmark(Description = "FrozenDictionary TryGetValue (missing)")
, BenchmarkCategory("Search missing key")]
public int Read_FrozenDictionary_TryGetValue_Missing()
=> _frozenDict.TryGetValue(_missingKey, out var v) ? v : 0;
// -------------------------
// Update behavior examples
// -------------------------
[Benchmark(Description = "ImmutableDictionary SetItem (creates new)")
, BenchmarkCategory("Update")]
public ImmutableDictionary<string, int> Update_ImmutableDictionary_SetItem()
=> _immutableDict.SetItem(_existingKey, 99);
[Benchmark(Description = "Dictionary update in-place", Baseline =true)
, BenchmarkCategory("Update")]
public int Update_Dictionary_InPlace()
{
_dict[_existingKey] = 99;
return _dict[_existingKey];
}
// Frozen update requires rebuild; this benchmark shows the cost explicitly.
[Benchmark(Description = "FrozenDictionary 'update' (rebuild)")
, BenchmarkCategory("Update")]
public FrozenDictionary<string, int> Update_FrozenDictionary_Rebuild()
{
var copy = new Dictionary<string, int>(_dict, StringComparer.Ordinal)
{
[_existingKey] = 99
};
return copy.ToFrozenDictionary(StringComparer.Ordinal);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment