Performance Comparison: Containers
This file is auto-generated
All measurments were taken on 12th Gen Intel(R) Core(TM) i9-12900K with 24 logical cores.
Unity Editor version: 2022.2.8f1
To regenerate this file locally use: DOTS -> Unity.Collections -> Generate *** menu.
Table of Contents
Benchmark Results
The Median of 10 sample sets is compared against the baseline on the far right side of the table.
Multithreaded benchmarks divide the processing amongst the specified number of workers.
5 extra sample sets are run as warmup.
Legend
(S)
= Safety Enabled
(B)
= Burst Compiled with Safety Disabled
(S+B)
= Burst Compiled with Safety Enabled
(BCL)
= Base Class Library implementation (such as provided by Mono or .NET)
italic
results are for benchmarking comparison only; these are not included in standard Performance Framework tests
HashMap
Functionality | NativeHashMap (S) | NativeHashMap (S+B) | NativeHashMap (B) | UnsafeHashMap (S) | UnsafeHashMap (S+B) | UnsafeHashMap (B) | Dictionary (BCL) |
---|---|---|---|---|---|---|---|
IsEmpty_x_100k(0) ¹ |
0.297ms (0.3x) 🟠 | 0.055ms (1.8x) | 0.040ms (2.5x) | 0.107ms (0.9x) | 0.037ms (2.7x) 🟢 | 0.040ms (2.5x) | 0.100ms (1.0x) |
IsEmpty_x_100k(100) ¹ |
0.287ms (0.3x) 🟠 | 0.056ms (1.8x) | 0.040ms (2.5x) | 0.107ms (0.9x) | 0.036ms (2.8x) 🟢 | 0.036ms (2.8x) 🟢 | 0.100ms (1.0x) |
Count_x_100k(0) ¹ |
0.221ms (0.5x) 🟠 | 0.040ms (2.5x) | 0.025ms (4.0x) | 0.082ms (1.2x) | 0.025ms (4.0x) 🟢 | 0.025ms (4.0x) | 0.100ms (1.0x) |
Count_x_100k(100) ¹ |
0.221ms (0.5x) 🟠 | 0.040ms (2.5x) | 0.025ms (4.0x) | 0.080ms (1.2x) | 0.025ms (4.0x) 🟢 | 0.025ms (4.0x) 🟢 | 0.100ms (1.0x) |
ToNativeArrayKeys(10000) |
0.048ms (0.2x) 🟠 | 0.009ms (1.3x) | 0.006ms (1.8x) 🟢 | 0.046ms (0.2x) | 0.009ms (1.3x) | 0.006ms (1.8x) | 0.011ms (1.0x) |
ToNativeArrayKeys(100000) |
0.498ms (0.2x) 🟠 | 0.114ms (1.0x) | 0.066ms (1.8x) | 0.402ms (0.3x) | 0.087ms (1.4x) | 0.065ms (1.8x) 🟢 | 0.118ms (1.0x) |
ToNativeArrayKeys(1000000) |
4.885ms (0.3x) 🟠 | 0.871ms (1.4x) | 0.638ms (1.9x) | 4.791ms (0.3x) | 0.858ms (1.4x) | 0.611ms (2.0x) 🟢 | 1.239ms (1.0x) |
ToNativeArrayValues(10000) |
0.041ms (0.3x) | 0.009ms (1.2x) | 0.006ms (1.8x) 🟢 | 0.048ms (0.2x) 🟠 | 0.009ms (1.2x) | 0.006ms (1.7x) | 0.011ms (1.0x) |
ToNativeArrayValues(100000) |
0.489ms (0.2x) 🟠 | 0.115ms (1.0x) | 0.064ms (1.7x) | 0.384ms (0.3x) | 0.087ms (1.3x) | 0.062ms (1.7x) 🟢 | 0.109ms (1.0x) |
ToNativeArrayValues(1000000) |
4.834ms (0.3x) | 0.858ms (1.7x) | 0.635ms (2.3x) | 4.845ms (0.3x) 🟠 | 0.855ms (1.7x) | 0.603ms (2.4x) 🟢 | 1.446ms (1.0x) |
Insert(10000) |
0.203ms (0.3x) 🟠 | 0.083ms (0.7x) | 0.028ms (2.0x) | 0.073ms (0.8x) | 0.025ms (2.2x) | 0.024ms (2.3x) 🟢 | 0.055ms (1.0x) |
Insert(100000) |
2.057ms (0.3x) 🟠 | 0.844ms (0.6x) | 0.545ms (1.0x) | 0.934ms (0.6x) | 0.540ms (1.0x) | 0.530ms (1.0x) 🟢 | 0.537ms (1.0x) |
Insert(1000000) |
22.131ms (0.3x) 🟠 | 9.500ms (0.6x) | 4.329ms (1.3x) | 9.158ms (0.6x) | 4.014ms (1.4x) 🟢 | 4.202ms (1.4x) | 5.740ms (1.0x) |
AddGrow(4, 1048576) ³ |
78.798ms (0.2x) 🟠 | 34.548ms (0.5x) | 27.757ms (0.6x) | 64.686ms (0.3x) | 29.100ms (0.6x) | 28.052ms (0.6x) | 17.026ms (1.0x) 🟢 |
AddGrow(65536, 1048576) ³ |
77.639ms (0.2x) 🟠 | 33.682ms (0.4x) | 27.523ms (0.5x) | 63.560ms (0.2x) | 28.941ms (0.5x) | 28.508ms (0.5x) | 14.062ms (1.0x) 🟢 |
Contains(10000) |
0.047ms (1.1x) | 0.010ms (5.0x) | 0.006ms (8.1x) | 0.043ms (1.2x) | 0.007ms (7.6x) | 0.005ms (9.3x) 🟢 | 0.050ms (1.0x) 🟠 |
Contains(100000) |
0.466ms (1.2x) | 0.126ms (4.3x) | 0.075ms (7.2x) | 0.471ms (1.2x) | 0.083ms (6.6x) | 0.069ms (7.9x) 🟢 | 0.542ms (1.0x) 🟠 |
Contains(1000000) |
7.718ms (1.2x) | 3.085ms (2.9x) | 2.199ms (4.1x) | 8.264ms (1.1x) | 1.997ms (4.5x) | 1.910ms (4.7x) 🟢 | 9.073ms (1.0x) 🟠 |
IndexedRead(10000) |
0.054ms (1.0x) 🟠 | 0.007ms (7.7x) | 0.007ms (7.0x) | 0.052ms (1.0x) | 0.007ms (7.2x) | 0.006ms (8.9x) 🟢 | 0.052ms (1.0x) |
IndexedRead(100000) |
0.566ms (1.0x) | 0.086ms (6.6x) | 0.094ms (6.0x) | 0.568ms (1.0x) | 0.076ms (7.5x) 🟢 | 0.078ms (7.3x) | 0.569ms (1.0x) 🟠 |
IndexedRead(1000000) |
9.409ms (1.0x) | 2.550ms (3.7x) | 2.818ms (3.4x) | 10.856ms (0.9x) 🟠 | 2.364ms (4.0x) 🟢 | 2.518ms (3.8x) | 9.459ms (1.0x) |
IndexedWrite(10000) |
0.326ms (0.3x) 🟠 | 0.144ms (0.7x) | 0.045ms (2.4x) | 0.109ms (1.0x) | 0.049ms (2.2x) | 0.044ms (2.4x) 🟢 | 0.108ms (1.0x) |
IndexedWrite(100000) |
3.506ms (0.4x) 🟠 | 1.509ms (0.9x) | 0.589ms (2.3x) 🟢 | 1.150ms (1.2x) | 0.613ms (2.2x) | 0.597ms (2.3x) | 1.371ms (1.0x) |
IndexedWrite(1000000) |
44.817ms (0.4x) 🟠 | 20.603ms (0.9x) | 9.784ms (1.8x) | 19.412ms (0.9x) | 9.515ms (1.9x) 🟢 | 11.705ms (1.5x) | 17.967ms (1.0x) |
TryGetValue(10000) |
0.052ms (1.1x) | 0.008ms (7.3x) | 0.007ms (7.7x) | 0.051ms (1.1x) | 0.006ms (8.8x) | 0.006ms (9.3x) 🟢 | 0.056ms (1.0x) 🟠 |
TryGetValue(100000) |
0.567ms (1.1x) | 0.094ms (6.4x) | 0.098ms (6.1x) | 0.589ms (1.0x) | 0.076ms (7.9x) 🟢 | 0.078ms (7.7x) | 0.600ms (1.0x) 🟠 |
TryGetValue(1000000) |
8.939ms (1.0x) | 2.781ms (3.3x) | 2.799ms (3.2x) | 9.534ms (1.0x) 🟠 | 2.340ms (3.9x) 🟢 | 2.380ms (3.8x) | 9.078ms (1.0x) |
Remove(10000) |
0.202ms (0.5x) 🟠 | 0.088ms (1.1x) | 0.030ms (3.4x) | 0.074ms (1.4x) | 0.028ms (3.6x) | 0.026ms (3.9x) 🟢 | 0.101ms (1.0x) |
Remove(100000) |
2.078ms (0.5x) 🟠 | 0.987ms (1.1x) | 0.397ms (2.7x) | 0.799ms (1.4x) | 0.392ms (2.8x) | 0.355ms (3.0x) 🟢 | 1.079ms (1.0x) |
Remove(1000000) |
25.615ms (0.5x) 🟠 | 12.299ms (1.1x) | 6.052ms (2.2x) | 10.995ms (1.2x) | 5.607ms (2.4x) | 5.209ms (2.6x) 🟢 | 13.406ms (1.0x) |
Foreach(10000) |
0.103ms (0.3x) 🟠 | 0.012ms (2.3x) | 0.011ms (2.4x) 🟢 | 0.093ms (0.3x) | 0.012ms (2.3x) | 0.011ms (2.4x) | 0.027ms (1.0x) |
Foreach(100000) |
1.045ms (0.3x) 🟠 | 0.113ms (2.3x) | 0.098ms (2.7x) 🟢 | 0.913ms (0.3x) | 0.120ms (2.2x) | 0.118ms (2.2x) | 0.262ms (1.0x) |
Foreach(1000000) |
10.487ms (0.3x) 🟠 | 0.951ms (2.8x) 🟢 | 0.975ms (2.8x) | 9.253ms (0.3x) | 1.124ms (2.4x) | 1.008ms (2.7x) | 2.698ms (1.0x) |
¹ Optimizations were disabled to perform this benchmark
³ AddGrow(capacity, growTo) -- Incrementally grows from capacity
until reaching size of growTo
HashSet
Functionality | NativeHashSet (S) | NativeHashSet (S+B) | NativeHashSet (B) | UnsafeHashSet (S) | UnsafeHashSet (S+B) | UnsafeHashSet (B) | HashSet (BCL) |
---|---|---|---|---|---|---|---|
IsEmpty_x_100k(0) ¹ |
0.298ms (0.4x) 🟠 | 0.055ms (2.2x) | 0.040ms (3.1x) | 0.157ms (0.8x) | 0.037ms (3.3x) | 0.037ms (3.4x) 🟢 | 0.123ms (1.0x) |
IsEmpty_x_100k(100) ¹ |
0.297ms (0.4x) 🟠 | 0.054ms (2.3x) | 0.040ms (3.1x) | 0.157ms (0.8x) | 0.036ms (3.4x) 🟢 | 0.036ms (3.4x) 🟢 | 0.123ms (1.0x) |
Count_x_100k(0) ¹ |
0.201ms (0.6x) 🟠 | 0.040ms (3.0x) | 0.025ms (4.8x) | 0.080ms (1.5x) | 0.025ms (4.9x) 🟢 | 0.025ms (4.8x) | 0.120ms (1.0x) |
Count_x_100k(100) ¹ |
0.201ms (0.6x) 🟠 | 0.041ms (3.0x) | 0.025ms (4.9x) 🟢 | 0.080ms (1.5x) | 0.041ms (3.0x) | 0.025ms (4.9x) 🟢 | 0.120ms (1.0x) |
ToNativeArray(10000) |
0.041ms (0.3x) | 0.008ms (1.6x) | 0.006ms (2.2x) 🟢 | 0.041ms (0.3x) 🟠 | 0.009ms (1.6x) | 0.007ms (2.0x) | 0.014ms (1.0x) |
ToNativeArray(100000) |
0.476ms (0.3x) | 0.107ms (1.4x) | 0.082ms (1.9x) | 0.480ms (0.3x) 🟠 | 0.092ms (1.7x) | 0.064ms (2.4x) 🟢 | 0.153ms (1.0x) |
ToNativeArray(1000000) |
4.984ms (0.3x) 🟠 | 1.080ms (1.5x) | 0.806ms (2.0x) | 4.766ms (0.3x) | 0.952ms (1.7x) | 0.640ms (2.5x) 🟢 | 1.628ms (1.0x) |
Insert(10000) |
0.185ms (0.3x) 🟠 | 0.085ms (0.7x) | 0.024ms (2.6x) | 0.053ms (1.2x) | 0.022ms (2.8x) 🟢 | 0.022ms (2.8x) 🟢 | 0.062ms (1.0x) |
Insert(100000) |
1.847ms (0.3x) 🟠 | 0.802ms (0.8x) | 0.487ms (1.3x) | 0.753ms (0.8x) | 0.484ms (1.3x) | 0.481ms (1.3x) 🟢 | 0.620ms (1.0x) |
Insert(1000000) |
19.765ms (0.3x) 🟠 | 8.994ms (0.7x) | 5.941ms (1.1x) | 8.529ms (0.7x) | 5.811ms (1.1x) 🟢 | 5.826ms (1.1x) | 6.356ms (1.0x) |
AddGrow(4, 1048576) ³ |
73.511ms (0.2x) 🟠 | 35.806ms (0.4x) | 30.565ms (0.4x) | 63.216ms (0.2x) | 31.391ms (0.4x) | 30.517ms (0.4x) | 13.376ms (1.0x) 🟢 |
AddGrow(65536, 1048576) ³ |
72.100ms (0.2x) 🟠 | 33.317ms (0.4x) | 31.521ms (0.4x) | 61.717ms (0.2x) | 31.977ms (0.4x) | 30.623ms (0.4x) | 12.670ms (1.0x) 🟢 |
Contains(10000) |
0.046ms (1.5x) | 0.011ms (6.6x) | 0.006ms (11.0x) | 0.043ms (1.6x) | 0.007ms (10.4x) | 0.005ms (12.9x) 🟢 | 0.070ms (1.0x) 🟠 |
Contains(100000) |
0.469ms (1.5x) | 0.127ms (5.6x) | 0.075ms (9.6x) | 0.457ms (1.6x) | 0.092ms (7.8x) | 0.064ms (11.3x) 🟢 | 0.718ms (1.0x) 🟠 |
Contains(1000000) |
7.919ms (1.4x) | 3.340ms (3.2x) | 1.774ms (6.0x) | 9.239ms (1.2x) | 1.951ms (5.5x) | 1.552ms (6.9x) 🟢 | 10.730ms (1.0x) 🟠 |
Remove(10000) |
0.206ms (0.6x) 🟠 | 0.089ms (1.3x) | 0.031ms (3.8x) | 0.071ms (1.7x) | 0.026ms (4.5x) | 0.025ms (4.6x) 🟢 | 0.118ms (1.0x) |
Remove(100000) |
2.120ms (0.6x) 🟠 | 1.025ms (1.2x) | 0.419ms (3.0x) | 0.791ms (1.6x) | 0.382ms (3.3x) | 0.334ms (3.8x) 🟢 | 1.255ms (1.0x) |
Remove(1000000) |
25.637ms (0.6x) 🟠 | 12.055ms (1.4x) | 6.241ms (2.6x) | 10.484ms (1.6x) | 5.776ms (2.8x) | 5.073ms (3.2x) 🟢 | 16.309ms (1.0x) |
Foreach(10000) |
0.065ms (0.3x) 🟠 | 0.018ms (1.0x) | 0.011ms (1.6x) | 0.034ms (0.6x) | 0.011ms (1.7x) 🟢 | 0.011ms (1.7x) 🟢 | 0.019ms (1.0x) |
Foreach(100000) |
0.607ms (0.3x) 🟠 | 0.131ms (1.4x) | 0.101ms (1.9x) | 0.304ms (0.6x) | 0.095ms (2.0x) | 0.094ms (2.0x) 🟢 | 0.189ms (1.0x) |
Foreach(1000000) |
6.170ms (0.3x) 🟠 | 1.375ms (1.4x) | 1.026ms (1.9x) | 2.982ms (0.7x) | 0.911ms (2.1x) 🟢 | 0.931ms (2.1x) | 1.945ms (1.0x) |
UnionWith(10000) |
0.285ms (0.7x) 🟠 | 0.150ms (1.4x) | 0.085ms (2.5x) | 0.159ms (1.3x) | 0.078ms (2.7x) | 0.073ms (2.9x) 🟢 | 0.211ms (1.0x) |
UnionWith(100000) |
2.986ms (0.8x) 🟠 | 1.535ms (1.6x) | 1.067ms (2.3x) | 1.817ms (1.4x) | 1.097ms (2.3x) | 1.050ms (2.4x) 🟢 | 2.486ms (1.0x) |
UnionWith(1000000) |
72.891ms (0.6x) 🟠 | 41.035ms (1.0x) | 32.962ms (1.3x) | 62.666ms (0.7x) | 34.089ms (1.3x) | 32.794ms (1.3x) 🟢 | 43.015ms (1.0x) |
IntersectWith(10000) |
0.236ms (0.8x) 🟠 | 0.127ms (1.5x) | 0.101ms (1.9x) | 0.170ms (1.1x) | 0.085ms (2.2x) 🟢 | 0.090ms (2.1x) | 0.191ms (1.0x) |
IntersectWith(100000) |
2.543ms (0.9x) 🟠 | 1.353ms (1.7x) | 1.127ms (2.1x) | 1.850ms (1.3x) | 1.099ms (2.1x) | 1.055ms (2.2x) 🟢 | 2.331ms (1.0x) |
IntersectWith(1000000) |
31.388ms (1.2x) | 18.153ms (2.0x) | 15.034ms (2.4x) | 23.326ms (1.6x) | 13.757ms (2.7x) 🟢 | 14.167ms (2.6x) | 36.515ms (1.0x) 🟠 |
ExceptWith(10000) |
0.280ms (0.6x) 🟠 | 0.141ms (1.1x) | 0.073ms (2.2x) 🟢 | 0.154ms (1.0x) | 0.076ms (2.1x) | 0.073ms (2.2x) | 0.161ms (1.0x) |
ExceptWith(100000) |
2.919ms (0.7x) 🟠 | 1.436ms (1.4x) | 0.992ms (2.0x) 🟢 | 1.634ms (1.2x) | 1.021ms (1.9x) | 1.039ms (1.9x) | 1.956ms (1.0x) |
ExceptWith(1000000) |
40.438ms (0.7x) 🟠 | 20.188ms (1.3x) | 13.687ms (1.9x) 🟢 | 22.843ms (1.2x) | 13.829ms (1.9x) | 13.732ms (1.9x) | 26.471ms (1.0x) |
¹ Optimizations were disabled to perform this benchmark
³ AddGrow(capacity, growTo) -- Incrementally grows from capacity
until reaching size of growTo
List
Functionality | NativeList (S) | NativeList (S+B) | NativeList (B) | UnsafeList (S) | UnsafeList (S+B) | UnsafeList (B) | List (BCL) |
---|---|---|---|---|---|---|---|
IsEmpty_x_100k(0) ¹ |
0.120ms (0.8x) | 0.040ms (2.5x) | 0.041ms (2.5x) | 0.123ms (0.8x) 🟠 | 0.036ms (2.8x) 🟢 | 0.036ms (2.8x) | 0.100ms (1.0x) |
IsEmpty_x_100k(100) ¹ |
0.120ms (0.9x) | 0.040ms (2.5x) | 0.041ms (2.5x) | 0.143ms (0.7x) 🟠 | 0.040ms (2.5x) 🟢 | 0.041ms (2.5x) | 0.102ms (1.0x) |
Count_x_100k(0) ¹ |
0.100ms (0.8x) 🟠 | 0.050ms (1.6x) | 0.048ms (1.7x) | 0.020ms (4.0x) 🟢 | 0.025ms (3.3x) | 0.025ms (3.2x) | 0.080ms (1.0x) |
Count_x_100k(100) ¹ |
0.100ms (0.8x) 🟠 | 0.050ms (1.6x) | 0.047ms (1.7x) | 0.020ms (4.1x) 🟢 | 0.040ms (2.0x) | 0.025ms (3.2x) | 0.082ms (1.0x) |
ToNativeArray(10000) |
0.002ms (1.5x) | 0.001ms (2.8x) | 0.001ms (3.0x) 🟢 | --- | --- | --- | 0.003ms (1.0x) 🟠 |
ToNativeArray(100000) |
0.096ms (0.3x) 🟠 | 0.009ms (3.8x) 🟢 | 0.013ms (2.5x) | --- | --- | --- | 0.033ms (1.0x) |
ToNativeArray(1000000) |
0.988ms (0.4x) 🟠 | 0.237ms (1.7x) | 0.237ms (1.7x) 🟢 | --- | --- | --- | 0.414ms (1.0x) |
Add(10000) |
0.148ms (0.1x) 🟠 | 0.062ms (0.2x) | 0.016ms (1.0x) | 0.016ms (0.9x) | 0.006ms (2.7x) | 0.005ms (3.1x) 🟢 | 0.015ms (1.0x) |
Add(100000) |
1.461ms (0.1x) 🟠 | 0.649ms (0.2x) | 0.154ms (1.0x) | 0.160ms (0.9x) | 0.046ms (3.2x) 🟢 | 0.047ms (3.1x) | 0.147ms (1.0x) |
Add(1000000) |
15.202ms (0.1x) 🟠 | 6.431ms (0.2x) | 1.523ms (1.0x) | 1.660ms (0.9x) | 0.482ms (3.2x) 🟢 | 0.495ms (3.1x) | 1.527ms (1.0x) |
AddGrow(4, 1048576) ³ |
17.105ms (0.2x) 🟠 | 7.606ms (0.4x) | 2.780ms (1.1x) | 2.960ms (1.1x) | 1.784ms (1.8x) | 1.729ms (1.8x) 🟢 | 3.193ms (1.0x) |
AddGrow(65536, 1048576) ³ |
17.040ms (0.2x) 🟠 | 7.671ms (0.4x) | 2.858ms (1.1x) | 3.016ms (1.1x) | 1.786ms (1.8x) 🟢 | 1.873ms (1.8x) | 3.281ms (1.0x) |
Contains(1000) |
0.182ms (1.3x) | 0.080ms (3.1x) | 0.080ms (3.1x) 🟢 | 0.177ms (1.4x) | 0.080ms (3.1x) | 0.080ms (3.1x) | 0.245ms (1.0x) 🟠 |
Contains(10000) |
18.061ms (1.4x) | 8.010ms (3.0x) | 7.760ms (3.1x) | 18.005ms (1.4x) | 7.636ms (3.2x) 🟢 | 7.701ms (3.2x) | 24.400ms (1.0x) 🟠 |
IndexedRead(10000) |
0.030ms (0.5x) 🟠 | 0.005ms (3.2x) | 0.003ms (5.5x) | 0.012ms (1.2x) | 0.003ms (4.6x) | 0.003ms (5.9x) 🟢 | 0.015ms (1.0x) |
IndexedRead(100000) |
0.356ms (0.4x) 🟠 | 0.047ms (3.2x) | 0.031ms (4.9x) 🟢 | 0.133ms (1.1x) | 0.042ms (3.6x) | 0.031ms (4.9x) 🟢 | 0.150ms (1.0x) |
IndexedRead(1000000) |
5.468ms (0.5x) 🟠 | 1.187ms (2.2x) | 0.966ms (2.7x) | 2.061ms (1.2x) | 1.084ms (2.4x) | 0.926ms (2.8x) 🟢 | 2.560ms (1.0x) |
IndexedWrite(10000) |
0.023ms (0.7x) 🟠 | 0.008ms (2.2x) | 0.006ms (2.9x) | 0.010ms (1.7x) | 0.005ms (3.7x) 🟢 | 0.005ms (3.6x) | 0.017ms (1.0x) |
IndexedWrite(100000) |
0.491ms (0.4x) 🟠 | 0.092ms (2.0x) | 0.085ms (2.2x) | 0.165ms (1.1x) | 0.084ms (2.2x) 🟢 | 0.087ms (2.1x) | 0.184ms (1.0x) |
IndexedWrite(1000000) |
9.340ms (0.3x) 🟠 | 1.703ms (1.8x) | 1.671ms (1.8x) | 4.359ms (0.7x) | 1.621ms (1.9x) | 1.597ms (1.9x) 🟢 | 3.045ms (1.0x) |
Remove(1000) |
0.083ms (0.2x) 🟠 | 0.014ms (1.0x) | 0.008ms (1.7x) | 0.074ms (0.2x) | 0.008ms (1.7x) 🟢 | 0.008ms (1.7x) 🟢 | 0.014ms (1.0x) |
Remove(10000) |
6.913ms (1.8x) | 0.727ms (17.1x) | 0.671ms (18.5x) | 6.526ms (1.9x) | 0.667ms (18.6x) 🟢 | 0.673ms (18.5x) | 12.441ms (1.0x) 🟠 |
Foreach(10000) |
0.015ms (1.3x) | 0.002ms (8.0x) | 0.002ms (8.3x) 🟢 | 0.015ms (1.3x) | 0.002ms (8.3x) 🟢 | 0.002ms (8.3x) 🟢 | 0.019ms (1.0x) 🟠 |
Foreach(100000) |
0.150ms (1.3x) | 0.021ms (9.2x) | 0.021ms (9.2x) | 0.150ms (1.3x) | 0.020ms (9.4x) 🟢 | 0.021ms (9.3x) | 0.191ms (1.0x) 🟠 |
Foreach(1000000) |
1.562ms (1.2x) | 0.244ms (7.9x) | 0.228ms (8.5x) | 1.530ms (1.3x) | 0.202ms (9.6x) 🟢 | 0.206ms (9.4x) | 1.936ms (1.0x) 🟠 |
¹ Optimizations were disabled to perform this benchmark
³ AddGrow(capacity, growTo) -- Incrementally grows from capacity
until reaching size of growTo
ParallelHashMap
Functionality | NativeParallelHashMap (S) | NativeParallelHashMap (S+B) | NativeParallelHashMap (B) | UnsafeParallelHashMap (S) | UnsafeParallelHashMap (S+B) | UnsafeParallelHashMap (B) | ConcurrentDictionary (BCL) |
---|---|---|---|---|---|---|---|
IsEmpty_x_100k(1, 0) ¹ |
0.432ms (226.7x) | 0.055ms (1781.8x) | 0.041ms (2372.9x) | 0.246ms (399.2x) | 0.037ms (2620.3x) 🟢 | 0.040ms (2425.7x) | 97.999ms (1.0x) 🟠 |
IsEmpty_x_100k(2, 0) ¹˒² |
0.241ms (723.2x) | 0.032ms (5506.3x) | 0.022ms (8018.4x) 🟢 | 0.115ms (1514.4x) | 0.041ms (4223.3x) | 0.041ms (4202.9x) | 173.999ms (1.0x) 🟠 |
IsEmpty_x_100k(4, 0) ¹˒² |
0.218ms (781.4x) | 0.016ms (10647.0x) | 0.012ms (13849.7x) | 0.099ms (1722.5x) | 0.022ms (7743.3x) | 0.011ms (15347.0x) 🟢 | 170.352ms (1.0x) 🟠 |
IsEmpty_x_100k(1, 100) ¹ |
0.590ms (159.2x) | 0.092ms (1015.8x) | 0.072ms (1303.7x) | 0.307ms (305.9x) | 0.069ms (1370.3x) 🟢 | 0.069ms (1370.3x) 🟢 | 93.863ms (1.0x) 🟠 |
IsEmpty_x_100k(2, 100) ¹˒² |
0.314ms (570.5x) | 0.048ms (3705.1x) | 0.038ms (4672.5x) 🟢 | 0.197ms (908.4x) | 0.038ms (4660.3x) | 0.039ms (4648.2x) | 178.957ms (1.0x) 🟠 |
IsEmpty_x_100k(4, 100) ¹˒² |
0.215ms (991.8x) | 0.048ms (4444.4x) | 0.034ms (6237.7x) 🟢 | 0.129ms (1652.4x) | 0.035ms (6165.6x) | 0.036ms (5876.9x) | 213.330ms (1.0x) 🟠 |
Count_x_100k(1, 0) ¹ |
0.511ms (193.2x) | 0.094ms (1052.2x) | 0.062ms (1598.8x) | 0.225ms (439.1x) | 0.062ms (1601.4x) 🟢 | 0.062ms (1601.4x) 🟢 | 98.806ms (1.0x) 🟠 |
Count_x_100k(2, 0) ¹˒² |
0.251ms (741.7x) | 0.050ms (3698.2x) | 0.037ms (4997.0x) | 0.115ms (1619.4x) | 0.035ms (5386.9x) 🟢 | 0.035ms (5386.9x) 🟢 | 186.388ms (1.0x) 🟠 |
Count_x_100k(4, 0) ¹˒² |
0.218ms (833.8x) | 0.051ms (3591.7x) | 0.040ms (4552.5x) | 0.091ms (2007.7x) | 0.018ms (10405.6x) 🟢 | 0.041ms (4398.5x) | 182.098ms (1.0x) 🟠 |
Count_x_100k(1, 100) ¹ |
6.592ms (14.8x) | 5.949ms (16.4x) | 5.913ms (16.5x) | 6.219ms (15.7x) | 5.868ms (16.6x) | 5.813ms (16.8x) 🟢 | 97.489ms (1.0x) 🟠 |
Count_x_100k(2, 100) ¹˒² |
3.295ms (57.2x) | 2.955ms (63.7x) | 2.947ms (63.9x) | 3.148ms (59.8x) | 2.921ms (64.5x) 🟢 | 2.941ms (64.0x) | 188.346ms (1.0x) 🟠 |
Count_x_100k(4, 100) ¹˒² |
1.687ms (115.5x) | 1.525ms (127.8x) | 1.466ms (132.9x) | 1.630ms (119.5x) | 1.466ms (132.9x) 🟢 | 1.467ms (132.8x) | 194.821ms (1.0x) 🟠 |
ToNativeArrayKeys(1, 10000) |
0.046ms (0.8x) 🟠 | 0.017ms (2.3x) | 0.006ms (6.3x) | 0.044ms (0.9x) | 0.009ms (4.4x) | 0.006ms (6.4x) 🟢 | 0.039ms (1.0x) |
ToNativeArrayKeys(1, 100000) |
0.494ms (0.8x) | 0.096ms (4.2x) | 0.060ms (6.8x) | 0.506ms (0.8x) 🟠 | 0.096ms (4.2x) | 0.057ms (7.1x) 🟢 | 0.405ms (1.0x) |
ToNativeArrayKeys(1, 1000000) |
5.303ms (1.0x) | 0.882ms (6.1x) | 0.687ms (7.8x) 🟢 | 5.043ms (1.1x) | 0.928ms (5.8x) | 0.773ms (7.0x) | 5.382ms (1.0x) 🟠 |
ToNativeArrayValues(1, 10000) |
0.043ms (0.8x) 🟠 | 0.009ms (3.8x) | 0.006ms (5.9x) 🟢 | 0.041ms (0.8x) | 0.009ms (3.9x) | 0.006ms (5.4x) | 0.034ms (1.0x) |
ToNativeArrayValues(1, 100000) |
0.484ms (0.8x) 🟠 | 0.084ms (4.5x) | 0.063ms (6.0x) | 0.483ms (0.8x) | 0.082ms (4.6x) | 0.052ms (7.2x) 🟢 | 0.376ms (1.0x) |
ToNativeArrayValues(1, 1000000) |
5.037ms (1.1x) | 0.881ms (6.4x) | 0.615ms (9.1x) 🟢 | 5.322ms (1.1x) | 0.847ms (6.6x) | 0.655ms (8.6x) | 5.617ms (1.0x) 🟠 |
Insert(1, 10000) |
0.315ms (3.8x) | 0.230ms (5.2x) | 0.161ms (7.5x) | 0.226ms (5.3x) | 0.161ms (7.4x) | 0.158ms (7.6x) 🟢 | 1.201ms (1.0x) 🟠 |
Insert(2, 10000) ² |
0.328ms (4.7x) | 0.350ms (4.4x) | 0.134ms (11.6x) 🟢 | 0.167ms (9.3x) | 0.138ms (11.2x) | 0.139ms (11.2x) | 1.555ms (1.0x) 🟠 |
Insert(4, 10000) ² |
0.328ms (6.4x) | 0.367ms (5.7x) | 0.137ms (15.3x) | 0.136ms (15.5x) | 0.135ms (15.5x) 🟢 | 0.149ms (14.1x) | 2.102ms (1.0x) 🟠 |
Insert(1, 100000) |
3.238ms (3.9x) | 2.309ms (5.4x) | 1.613ms (7.8x) 🟢 | 2.253ms (5.6x) | 1.614ms (7.8x) | 1.622ms (7.7x) | 12.506ms (1.0x) 🟠 |
Insert(2, 100000) ² |
3.410ms (18.4x) | 3.525ms (17.8x) | 1.359ms (46.3x) | 1.471ms (42.8x) | 1.456ms (43.2x) | 1.355ms (46.4x) 🟢 | 62.908ms (1.0x) 🟠 |
Insert(4, 100000) ² |
3.032ms (7.8x) | 2.837ms (8.3x) | 1.117ms (21.2x) | 1.014ms (23.3x) 🟢 | 1.198ms (19.7x) | 1.125ms (21.0x) | 23.665ms (1.0x) 🟠 |
Insert(1, 1000000) |
33.813ms (5.7x) | 24.436ms (7.9x) | 17.537ms (11.0x) | 23.694ms (8.2x) | 17.589ms (11.0x) | 17.433ms (11.1x) 🟢 | 193.464ms (1.0x) 🟠 |
Insert(2, 1000000) ² |
35.429ms (5.1x) | 33.098ms (5.4x) | 15.408ms (11.7x) | 16.052ms (11.2x) | 14.894ms (12.1x) | 14.741ms (12.2x) 🟢 | 179.727ms (1.0x) 🟠 |
Insert(4, 1000000) ² |
32.210ms (7.0x) | 28.346ms (8.0x) | 13.034ms (17.4x) | 11.956ms (18.9x) 🟢 | 13.236ms (17.1x) | 12.634ms (17.9x) | 226.153ms (1.0x) 🟠 |
AddGrow(1, 4, 1048576) ³ |
43.625ms (5.4x) | 18.364ms (12.8x) | 12.671ms (18.5x) | 32.314ms (7.3x) | 13.079ms (18.0x) | 12.364ms (19.0x) 🟢 | 234.859ms (1.0x) 🟠 |
AddGrow(1, 65536, 1048576) ³ |
40.864ms (3.0x) | 17.987ms (6.8x) | 11.833ms (10.4x) 🟢 | 30.744ms (4.0x) | 12.772ms (9.6x) | 12.791ms (9.6x) | 122.720ms (1.0x) 🟠 |
Contains(1, 10000) |
0.083ms (1.0x) 🟠 | 0.010ms (8.1x) | 0.006ms (13.6x) 🟢 | 0.050ms (1.6x) | 0.010ms (8.1x) | 0.006ms (13.1x) | 0.080ms (1.0x) |
Contains(2, 10000) ² |
0.049ms (1.3x) | 0.012ms (5.2x) | 0.010ms (6.2x) | 0.034ms (1.8x) | 0.012ms (5.1x) | 0.010ms (6.6x) 🟢 | 0.063ms (1.0x) 🟠 |
Contains(4, 10000) ² |
0.136ms (1.2x) | 0.012ms (13.5x) | 0.010ms (16.1x) 🟢 | 0.025ms (6.5x) | 0.011ms (14.8x) | 0.120ms (1.4x) | 0.163ms (1.0x) 🟠 |
Contains(1, 100000) |
0.874ms (1.1x) | 0.114ms (8.1x) | 0.079ms (11.6x) | 0.613ms (1.5x) | 0.116ms (7.9x) | 0.079ms (11.7x) 🟢 | 0.918ms (1.0x) 🟠 |
Contains(2, 100000) ² |
0.529ms (1.1x) | 0.097ms (6.0x) | 0.068ms (8.6x) 🟢 | 0.385ms (1.5x) | 0.092ms (6.4x) | 0.093ms (6.3x) | 0.583ms (1.0x) 🟠 |
Contains(4, 100000) ² |
0.306ms (1.2x) | 0.152ms (2.4x) | 0.060ms (6.1x) 🟢 | 0.342ms (1.1x) | 0.072ms (5.1x) | 0.172ms (2.1x) | 0.369ms (1.0x) 🟠 |
Contains(1, 1000000) |
15.378ms (1.3x) | 3.007ms (6.5x) | 2.176ms (8.9x) 🟢 | 10.919ms (1.8x) | 2.531ms (7.7x) | 2.290ms (8.5x) | 19.437ms (1.0x) 🟠 |
Contains(2, 1000000) ² |
8.319ms (1.4x) | 1.868ms (6.1x) | 1.286ms (8.9x) 🟢 | 6.566ms (1.7x) | 1.709ms (6.7x) | 1.343ms (8.5x) | 11.462ms (1.0x) 🟠 |
Contains(4, 1000000) ² |
4.621ms (1.3x) | 1.124ms (5.5x) | 1.007ms (6.1x) | 3.861ms (1.6x) | 1.074ms (5.7x) | 0.791ms (7.7x) 🟢 | 6.128ms (1.0x) 🟠 |
IndexedRead(1, 10000) |
0.077ms (1.0x) | 0.007ms (11.0x) 🟢 | 0.009ms (9.1x) | 0.060ms (1.3x) | 0.008ms (9.4x) | 0.008ms (9.5x) | 0.079ms (1.0x) 🟠 |
IndexedRead(2, 10000) ² |
0.096ms (1.0x) 🟠 | 0.018ms (5.2x) | 0.017ms (5.5x) | 0.067ms (1.4x) | 0.013ms (6.9x) 🟢 | 0.019ms (5.0x) | 0.092ms (1.0x) |
IndexedRead(4, 10000) ² |
0.090ms (2.6x) | 0.015ms (15.9x) 🟢 | 0.123ms (1.9x) | 0.169ms (1.4x) | 0.017ms (13.8x) | 0.016ms (15.3x) | 0.237ms (1.0x) 🟠 |
IndexedRead(1, 100000) |
0.889ms (1.1x) | 0.094ms (10.2x) 🟢 | 0.106ms (9.1x) | 0.688ms (1.4x) | 0.102ms (9.4x) | 0.121ms (7.9x) | 0.959ms (1.0x) 🟠 |
IndexedRead(2, 100000) ² |
0.953ms (1.2x) | 0.138ms (7.9x) | 0.123ms (8.9x) 🟢 | 0.762ms (1.4x) | 0.133ms (8.3x) | 0.151ms (7.3x) | 1.098ms (1.0x) 🟠 |
IndexedRead(4, 100000) ² |
1.052ms (1.0x) | 0.225ms (4.8x) | 0.131ms (8.2x) 🟢 | 0.779ms (1.4x) | 0.313ms (3.4x) | 0.141ms (7.6x) | 1.069ms (1.0x) 🟠 |
IndexedRead(1, 1000000) |
15.265ms (1.2x) | 2.894ms (6.3x) 🟢 | 3.170ms (5.8x) | 12.505ms (1.5x) | 3.040ms (6.0x) | 3.167ms (5.8x) | 18.366ms (1.0x) 🟠 |
IndexedRead(2, 1000000) ² |
15.077ms (1.1x) | 2.994ms (5.7x) | 2.937ms (5.8x) | 13.515ms (1.3x) | 2.668ms (6.4x) 🟢 | 2.981ms (5.7x) | 17.083ms (1.0x) 🟠 |
IndexedRead(4, 1000000) ² |
14.686ms (1.1x) | 2.787ms (6.0x) | 2.886ms (5.8x) | 11.597ms (1.4x) | 2.589ms (6.4x) 🟢 | 2.936ms (5.7x) | 16.662ms (1.0x) 🟠 |
IndexedWrite(1, 10000) |
0.283ms (1.9x) | 0.105ms (5.2x) | 0.044ms (12.5x) | 0.151ms (3.6x) | 0.047ms (11.5x) | 0.043ms (12.5x) 🟢 | 0.543ms (1.0x) 🟠 |
IndexedWrite(1, 100000) |
2.989ms (2.0x) | 1.125ms (5.4x) | 0.586ms (10.3x) | 1.619ms (3.7x) | 0.612ms (9.8x) | 0.564ms (10.7x) 🟢 | 6.017ms (1.0x) 🟠 |
IndexedWrite(1, 1000000) |
42.070ms (2.2x) | 16.424ms (5.7x) | 9.621ms (9.7x) | 28.322ms (3.3x) | 9.609ms (9.7x) | 9.348ms (9.9x) 🟢 | 92.933ms (1.0x) 🟠 |
TryGetValue(1, 10000) |
0.077ms (0.9x) 🟠 | 0.012ms (5.8x) | 0.008ms (8.2x) 🟢 | 0.051ms (1.3x) | 0.013ms (5.3x) | 0.009ms (7.9x) | 0.068ms (1.0x) |
TryGetValue(2, 10000) ² |
0.151ms (0.3x) 🟠 | 0.012ms (3.9x) | 0.011ms (4.5x) | 0.036ms (1.3x) | 0.012ms (4.0x) | 0.011ms (4.6x) 🟢 | 0.049ms (1.0x) |
TryGetValue(4, 10000) ² |
0.487ms (0.3x) 🟠 | 0.123ms (1.3x) | 0.122ms (1.3x) | 0.130ms (1.2x) | 0.013ms (12.5x) 🟢 | 0.122ms (1.3x) | 0.160ms (1.0x) |
TryGetValue(1, 100000) |
0.848ms (0.9x) 🟠 | 0.149ms (5.3x) | 0.112ms (7.0x) 🟢 | 0.590ms (1.3x) | 0.160ms (4.9x) | 0.125ms (6.3x) | 0.781ms (1.0x) |
TryGetValue(2, 100000) ² |
0.553ms (1.0x) 🟠 | 0.110ms (5.0x) | 0.087ms (6.3x) 🟢 | 0.386ms (1.4x) | 0.114ms (4.8x) | 0.092ms (5.9x) | 0.549ms (1.0x) |
TryGetValue(4, 100000) ² |
0.355ms (1.2x) | 0.209ms (2.1x) | 0.192ms (2.3x) | 0.211ms (2.1x) | 0.160ms (2.7x) 🟢 | 0.189ms (2.3x) | 0.432ms (1.0x) 🟠 |
TryGetValue(1, 1000000) |
14.213ms (1.2x) | 3.487ms (5.0x) | 2.716ms (6.4x) 🟢 | 10.699ms (1.6x) | 3.711ms (4.7x) | 2.888ms (6.0x) | 17.418ms (1.0x) 🟠 |
TryGetValue(2, 1000000) ² |
7.950ms (1.3x) | 2.387ms (4.4x) | 1.792ms (5.8x) | 6.440ms (1.6x) | 2.167ms (4.8x) | 1.691ms (6.2x) 🟢 | 10.419ms (1.0x) 🟠 |
TryGetValue(4, 1000000) ² |
4.282ms (1.4x) | 1.327ms (4.6x) | 1.281ms (4.8x) | 3.100ms (2.0x) | 1.205ms (5.1x) | 1.001ms (6.1x) 🟢 | 6.150ms (1.0x) 🟠 |
Remove(1, 10000) |
0.209ms (1.4x) | 0.093ms (3.2x) | 0.033ms (8.8x) | 0.078ms (3.8x) | 0.029ms (10.2x) 🟢 | 0.032ms (9.3x) | 0.295ms (1.0x) 🟠 |
Remove(1, 100000) |
2.236ms (1.5x) | 1.019ms (3.2x) | 0.409ms (8.0x) 🟢 | 0.850ms (3.9x) | 0.414ms (7.9x) | 0.435ms (7.5x) | 3.282ms (1.0x) 🟠 |
Remove(1, 1000000) |
27.198ms (1.5x) | 12.415ms (3.2x) | 6.210ms (6.4x) | 10.913ms (3.7x) | 6.001ms (6.7x) 🟢 | 6.520ms (6.1x) | 40.044ms (1.0x) 🟠 |
Foreach(1, 10000) |
0.108ms (2.9x) | 0.012ms (26.3x) 🟢 | 0.013ms (24.5x) | 0.097ms (3.2x) | 0.013ms (24.1x) | 0.013ms (24.7x) | 0.311ms (1.0x) 🟠 |
Foreach(1, 100000) |
1.045ms (2.9x) | 0.097ms (31.3x) 🟢 | 0.110ms (27.9x) | 0.948ms (3.2x) | 0.111ms (27.4x) | 0.109ms (27.9x) | 3.050ms (1.0x) 🟠 |
Foreach(1, 1000000) |
10.987ms (2.9x) | 1.289ms (24.9x) | 1.256ms (25.6x) | 9.502ms (3.4x) | 1.191ms (26.9x) | 1.191ms (26.9x) 🟢 | 32.081ms (1.0x) 🟠 |
¹ Optimizations were disabled to perform this benchmark
² Benchmark run on parallel job workers - results may vary
³ AddGrow(workers, capacity, growTo) -- Incrementally grows from capacity
until reaching size of growTo
ParallelHashSet
Functionality | NativeParallelHashSet (S) | NativeParallelHashSet (S+B) | NativeParallelHashSet (B) | UnsafeParallelHashSet (S) | UnsafeParallelHashSet (S+B) | UnsafeParallelHashSet (B) | HashSet w/lock (BCL) |
---|---|---|---|---|---|---|---|
IsEmpty_x_100k(1, 0) ¹ |
0.448ms (6.2x) | 0.055ms (50.9x) | 0.041ms (67.5x) | 0.225ms (12.4x) | 0.037ms (75.2x) | 0.036ms (77.0x) 🟢 | 2.789ms (1.0x) 🟠 |
IsEmpty_x_100k(2, 0) ¹˒² |
0.338ms (8.5x) | 0.033ms (88.0x) | 0.021ms (139.5x) 🟢 | 0.123ms (23.2x) | 0.042ms (68.1x) | 0.055ms (52.1x) | 2.861ms (1.0x) 🟠 |
IsEmpty_x_100k(4, 0) ¹˒² |
0.238ms (13.6x) | 0.015ms (210.4x) | 0.011ms (300.1x) 🟢 | 0.089ms (36.5x) | 0.012ms (279.4x) | 0.012ms (267.8x) | 3.241ms (1.0x) 🟠 |
IsEmpty_x_100k(1, 100) ¹ |
0.602ms (4.7x) | 0.092ms (30.3x) | 0.069ms (40.7x) | 0.307ms (9.1x) | 0.069ms (40.9x) 🟢 | 0.072ms (38.9x) | 2.799ms (1.0x) 🟠 |
IsEmpty_x_100k(2, 100) ¹˒² |
0.315ms (9.1x) | 0.049ms (59.0x) | 0.038ms (74.7x) 🟢 | 0.197ms (14.6x) | 0.039ms (74.3x) | 0.040ms (71.3x) | 2.868ms (1.0x) 🟠 |
IsEmpty_x_100k(4, 100) ¹˒² |
0.203ms (16.6x) | 0.041ms (82.0x) | 0.034ms (98.2x) 🟢 | 0.112ms (30.1x) | 0.034ms (98.2x) 🟢 | 0.035ms (96.5x) | 3.379ms (1.0x) 🟠 |
Count_x_100k(1, 0) ¹ |
0.491ms (5.6x) | 0.092ms (29.8x) | 0.060ms (45.6x) 🟢 | 0.302ms (9.1x) | 0.062ms (44.6x) | 0.062ms (44.6x) | 2.753ms (1.0x) 🟠 |
Count_x_100k(2, 0) ¹˒² |
0.248ms (11.6x) | 0.050ms (57.6x) | 0.038ms (75.2x) 🟢 | 0.166ms (17.4x) | 0.045ms (63.7x) | 0.039ms (74.8x) | 2.881ms (1.0x) 🟠 |
Count_x_100k(4, 0) ¹˒² |
0.218ms (42.7x) | 0.032ms (287.0x) | 0.035ms (267.2x) | 0.098ms (94.6x) | 0.050ms (186.3x) | 0.018ms (528.3x) 🟢 | 9.298ms (1.0x) 🟠 |
Count_x_100k(1, 100) ¹ |
6.458ms (0.4x) 🟠 | 5.779ms (0.5x) | 5.830ms (0.5x) | 6.114ms (0.5x) | 5.823ms (0.5x) | 5.788ms (0.5x) | 2.768ms (1.0x) 🟢 |
Count_x_100k(2, 100) ¹˒² |
3.306ms (0.9x) 🟠 | 2.952ms (1.0x) | 2.884ms (1.0x) | 3.123ms (0.9x) | 2.912ms (1.0x) | 2.897ms (1.0x) | 2.866ms (1.0x) 🟢 |
Count_x_100k(4, 100) ¹˒² |
1.700ms (1.9x) | 1.596ms (2.0x) | 1.499ms (2.1x) 🟢 | 1.607ms (2.0x) | 1.524ms (2.1x) | 1.589ms (2.0x) | 3.214ms (1.0x) 🟠 |
ToNativeArray(1, 10000) |
0.044ms (1.9x) | 0.009ms (9.8x) | 0.006ms (14.3x) 🟢 | 0.046ms (1.9x) | 0.016ms (5.3x) | 0.007ms (13.2x) | 0.086ms (1.0x) 🟠 |
ToNativeArray(1, 100000) |
0.489ms (0.2x) | 0.095ms (1.3x) | 0.059ms (2.1x) 🟢 | 0.506ms (0.2x) 🟠 | 0.085ms (1.4x) | 0.064ms (1.9x) | 0.120ms (1.0x) |
ToNativeArray(1, 1000000) |
5.172ms (0.3x) | 1.147ms (1.3x) | 0.814ms (1.8x) | 5.443ms (0.3x) 🟠 | 1.099ms (1.3x) | 0.660ms (2.2x) 🟢 | 1.480ms (1.0x) |
Insert(1, 10000) |
0.309ms (1.2x) | 0.232ms (1.6x) | 0.163ms (2.3x) | 0.227ms (1.6x) | 0.162ms (2.3x) 🟢 | 0.163ms (2.3x) | 0.370ms (1.0x) 🟠 |
Insert(2, 10000) ² |
0.405ms (36.9x) | 0.386ms (38.8x) | 0.254ms (58.9x) | 0.264ms (56.7x) | 0.262ms (57.2x) | 0.239ms (62.5x) 🟢 | 14.970ms (1.0x) 🟠 |
Insert(4, 10000) ² |
0.374ms (41.0x) | 0.332ms (46.2x) | 0.201ms (76.3x) | 0.219ms (70.0x) | 0.195ms (78.5x) | 0.184ms (83.1x) 🟢 | 15.310ms (1.0x) 🟠 |
Insert(1, 100000) |
3.195ms (1.1x) | 2.304ms (1.6x) | 1.625ms (2.2x) | 2.302ms (1.6x) | 1.621ms (2.3x) | 1.618ms (2.3x) 🟢 | 3.654ms (1.0x) 🟠 |
Insert(2, 100000) ² |
4.213ms (3.8x) | 3.716ms (4.3x) | 2.411ms (6.6x) | 2.769ms (5.7x) | 2.500ms (6.3x) | 2.406ms (6.6x) 🟢 | 15.860ms (1.0x) 🟠 |
Insert(4, 100000) ² |
3.094ms (14.9x) | 2.972ms (15.5x) | 1.750ms (26.3x) | 1.793ms (25.6x) | 1.836ms (25.0x) | 1.740ms (26.4x) 🟢 | 45.962ms (1.0x) 🟠 |
Insert(1, 1000000) |
32.916ms (1.2x) | 23.858ms (1.7x) | 17.121ms (2.3x) | 23.780ms (1.7x) | 17.022ms (2.3x) | 17.019ms (2.3x) 🟢 | 39.661ms (1.0x) 🟠 |
Insert(2, 1000000) ² |
43.333ms (1.1x) | 39.590ms (1.3x) | 25.178ms (2.0x) 🟢 | 27.607ms (1.8x) | 25.388ms (2.0x) | 25.220ms (2.0x) | 49.668ms (1.0x) 🟠 |
Insert(4, 1000000) ² |
31.618ms (2.0x) | 30.549ms (2.0x) | 18.563ms (3.4x) | 18.961ms (3.3x) | 18.774ms (3.3x) | 18.419ms (3.4x) 🟢 | 62.267ms (1.0x) 🟠 |
AddGrow(1, 4, 1048576) ³ |
42.360ms (1.3x) | 17.060ms (3.1x) | 11.943ms (4.4x) | 32.373ms (1.6x) | 12.042ms (4.4x) | 11.545ms (4.6x) 🟢 | 52.967ms (1.0x) 🟠 |
AddGrow(1, 65536, 1048576) ³ |
40.160ms (1.0x) 🟠 | 16.465ms (2.4x) | 11.491ms (3.4x) | 30.178ms (1.3x) | 11.307ms (3.4x) | 11.226ms (3.5x) 🟢 | 38.751ms (1.0x) |
Contains(1, 10000) |
0.075ms (4.9x) | 0.010ms (38.6x) | 0.006ms (60.7x) 🟢 | 0.057ms (6.5x) | 0.010ms (38.2x) | 0.006ms (59.8x) | 0.371ms (1.0x) 🟠 |
Contains(2, 10000) ² |
0.053ms (7.7x) | 0.012ms (33.2x) | 0.011ms (35.9x) | 0.039ms (10.4x) | 0.013ms (30.5x) | 0.010ms (41.8x) 🟢 | 0.405ms (1.0x) 🟠 |
Contains(4, 10000) ² |
0.487ms (0.9x) 🟠 | 0.120ms (3.6x) | 0.009ms (49.2x) 🟢 | 0.035ms (12.2x) | 0.124ms (3.5x) | 0.120ms (3.6x) | 0.433ms (1.0x) |
Contains(1, 100000) |
0.837ms (4.7x) | 0.116ms (34.1x) | 0.077ms (51.2x) 🟢 | 0.639ms (6.2x) | 0.116ms (34.2x) | 0.090ms (44.2x) | 3.965ms (1.0x) 🟠 |
Contains(2, 100000) ² |
0.477ms (8.8x) | 0.099ms (42.6x) | 0.069ms (61.2x) | 0.680ms (6.2x) | 0.096ms (44.0x) | 0.066ms (63.3x) 🟢 | 4.198ms (1.0x) 🟠 |
Contains(4, 100000) ² |
0.399ms (12.3x) | 0.194ms (25.3x) | 0.178ms (27.5x) | 0.283ms (17.3x) | 0.194ms (25.3x) | 0.175ms (28.0x) 🟢 | 4.906ms (1.0x) 🟠 |
Contains(1, 1000000) |
13.971ms (3.5x) | 2.595ms (18.6x) | 1.860ms (26.0x) 🟢 | 10.541ms (4.6x) | 2.483ms (19.5x) | 2.100ms (23.0x) | 48.349ms (1.0x) 🟠 |
Contains(2, 1000000) ² |
8.096ms (6.5x) | 1.934ms (27.4x) | 1.246ms (42.5x) 🟢 | 6.541ms (8.1x) | 1.594ms (33.2x) | 1.327ms (39.9x) | 52.982ms (1.0x) 🟠 |
Contains(4, 1000000) ² |
4.207ms (14.3x) | 1.135ms (52.9x) | 0.919ms (65.4x) | 3.522ms (17.1x) | 1.220ms (49.3x) | 0.913ms (65.8x) 🟢 | 60.109ms (1.0x) 🟠 |
Remove(1, 10000) |
0.220ms (1.6x) | 0.093ms (3.8x) | 0.033ms (10.7x) | 0.083ms (4.2x) | 0.033ms (10.5x) | 0.030ms (11.7x) 🟢 | 0.351ms (1.0x) 🟠 |
Remove(1, 100000) |
2.251ms (1.8x) | 1.041ms (3.8x) | 0.406ms (9.7x) 🟢 | 0.932ms (4.2x) | 0.420ms (9.4x) | 0.428ms (9.2x) | 3.952ms (1.0x) 🟠 |
Remove(1, 1000000) |
27.781ms (1.8x) | 12.522ms (4.0x) | 6.399ms (7.7x) 🟢 | 11.904ms (4.2x) | 6.407ms (7.7x) | 6.460ms (7.7x) | 49.475ms (1.0x) 🟠 |
Foreach(1, 10000) |
0.061ms (0.3x) 🟠 | 0.018ms (1.0x) | 0.015ms (1.2x) | 0.036ms (0.5x) | 0.012ms (1.5x) | 0.012ms (1.5x) 🟢 | 0.019ms (1.0x) |
Foreach(1, 100000) |
0.589ms (0.3x) 🟠 | 0.123ms (1.6x) | 0.122ms (1.6x) | 0.339ms (0.6x) | 0.103ms (1.9x) 🟢 | 0.114ms (1.7x) | 0.196ms (1.0x) |
Foreach(1, 1000000) |
5.883ms (0.3x) 🟠 | 1.070ms (1.9x) | 1.418ms (1.4x) | 3.449ms (0.6x) | 0.966ms (2.1x) 🟢 | 0.994ms (2.0x) | 1.984ms (1.0x) |
UnionWith(1, 10000) |
0.521ms (0.4x) 🟠 | 0.208ms (1.0x) | 0.154ms (1.3x) 🟢 | 0.410ms (0.5x) | 0.173ms (1.2x) | 0.157ms (1.3x) | 0.203ms (1.0x) |
UnionWith(1, 100000) |
5.231ms (0.4x) 🟠 | 2.216ms (1.0x) | 1.918ms (1.1x) | 4.134ms (0.5x) | 1.780ms (1.2x) 🟢 | 1.825ms (1.2x) | 2.128ms (1.0x) |
UnionWith(1, 1000000) |
76.054ms (0.4x) 🟠 | 39.983ms (0.8x) | 32.060ms (1.1x) | 62.585ms (0.5x) | 31.404ms (1.1x) 🟢 | 31.980ms (1.1x) | 33.698ms (1.0x) |
IntersectWith(1, 10000) |
0.312ms (0.7x) 🟠 | 0.111ms (1.9x) | 0.096ms (2.2x) | 0.208ms (1.0x) | 0.075ms (2.8x) 🟢 | 0.095ms (2.2x) | 0.209ms (1.0x) |
IntersectWith(1, 100000) |
3.034ms (0.7x) 🟠 | 1.333ms (1.6x) | 1.090ms (2.0x) 🟢 | 2.277ms (0.9x) | 1.094ms (2.0x) | 1.129ms (1.9x) | 2.135ms (1.0x) |
IntersectWith(1, 1000000) |
38.309ms (0.9x) 🟠 | 16.649ms (2.0x) | 14.463ms (2.3x) 🟢 | 30.865ms (1.1x) | 14.468ms (2.3x) | 14.609ms (2.3x) | 33.610ms (1.0x) |
ExceptWith(1, 10000) |
0.300ms (0.6x) 🟠 | 0.151ms (1.2x) | 0.090ms (2.0x) | 0.154ms (1.2x) | 0.068ms (2.7x) 🟢 | 0.089ms (2.1x) | 0.183ms (1.0x) |
ExceptWith(1, 100000) |
3.106ms (0.6x) 🟠 | 1.481ms (1.2x) | 1.030ms (1.7x) | 1.694ms (1.1x) | 0.981ms (1.8x) 🟢 | 1.088ms (1.6x) | 1.791ms (1.0x) |
ExceptWith(1, 1000000) |
38.327ms (0.8x) 🟠 | 19.119ms (1.6x) | 13.951ms (2.2x) | 23.453ms (1.3x) | 13.483ms (2.2x) | 13.071ms (2.3x) 🟢 | 30.299ms (1.0x) |
¹ Optimizations were disabled to perform this benchmark
² Benchmark run on parallel job workers - results may vary
³ AddGrow(workers, capacity, growTo) -- Incrementally grows from capacity
until reaching size of growTo
QueueParallelWriter
Functionality | NativeQueueParallelWriter (S) | NativeQueueParallelWriter (S+B) | NativeQueueParallelWriter (B) | UnsafeQueueParallelWriter (S) | UnsafeQueueParallelWriter (S+B) | UnsafeQueueParallelWriter (B) | ConcurrentQueue (BCL) |
---|---|---|---|---|---|---|---|
EnqueueGrow(1, 10000) ³ |
0.044ms (2.7x) | 0.016ms (7.4x) 🟢 | 0.028ms (4.2x) | --- | --- | --- | 0.116ms (1.0x) 🟠 |
EnqueueGrow(2, 10000) ²˒³ |
0.033ms (5.8x) | 0.016ms (12.3x) 🟢 | 0.018ms (10.8x) | --- | --- | --- | 0.192ms (1.0x) 🟠 |
EnqueueGrow(4, 10000) ²˒³ |
0.019ms (15.6x) 🟢 | 0.087ms (3.4x) | 0.057ms (5.2x) | --- | --- | --- | 0.299ms (1.0x) 🟠 |
EnqueueGrow(1, 100000) ³ |
0.444ms (2.5x) | 0.131ms (8.4x) 🟢 | 0.268ms (4.1x) | --- | --- | --- | 1.097ms (1.0x) 🟠 |
EnqueueGrow(2, 100000) ²˒³ |
0.235ms (7.1x) | 0.095ms (17.8x) 🟢 | 0.166ms (10.1x) | --- | --- | --- | 1.678ms (1.0x) 🟠 |
EnqueueGrow(4, 100000) ²˒³ |
0.142ms (105.4x) | 0.114ms (131.9x) 🟢 | 0.159ms (94.2x) | --- | --- | --- | 14.997ms (1.0x) 🟠 |
EnqueueGrow(1, 1000000) ³ |
5.088ms (2.1x) | 1.357ms (7.8x) 🟢 | 3.872ms (2.7x) | --- | --- | --- | 10.547ms (1.0x) 🟠 |
EnqueueGrow(2, 1000000) ²˒³ |
2.670ms (5.9x) | 0.814ms (19.3x) 🟢 | 2.360ms (6.7x) | --- | --- | --- | 15.698ms (1.0x) 🟠 |
EnqueueGrow(4, 1000000) ²˒³ |
1.433ms (21.0x) | 2.670ms (11.3x) | 0.770ms (39.1x) 🟢 | --- | --- | --- | 30.114ms (1.0x) 🟠 |
Enqueue(1, 10000) ⁴ |
0.043ms (2.6x) | 0.006ms (17.6x) | 0.006ms (18.8x) 🟢 | --- | --- | --- | 0.109ms (1.0x) 🟠 |
Enqueue(2, 10000) ²˒⁴ |
0.030ms (6.2x) | 0.007ms (25.1x) 🟢 | 0.019ms (9.8x) | --- | --- | --- | 0.186ms (1.0x) 🟠 |
Enqueue(4, 10000) ²˒⁴ |
0.017ms (17.8x) | 0.008ms (38.9x) 🟢 | 0.042ms (7.4x) | --- | --- | --- | 0.307ms (1.0x) 🟠 |
Enqueue(1, 100000) ⁴ |
0.441ms (2.4x) | 0.059ms (18.2x) | 0.055ms (19.6x) 🟢 | --- | --- | --- | 1.075ms (1.0x) 🟠 |
Enqueue(2, 100000) ²˒⁴ |
0.231ms (6.9x) | 0.042ms (37.8x) 🟢 | 0.046ms (34.9x) | --- | --- | --- | 1.603ms (1.0x) 🟠 |
Enqueue(4, 100000) ²˒⁴ |
0.197ms (80.0x) | 0.027ms (581.8x) 🟢 | 0.039ms (408.5x) | --- | --- | --- | 15.768ms (1.0x) 🟠 |
Enqueue(1, 1000000) ⁴ |
4.406ms (2.4x) | 0.583ms (18.3x) | 0.528ms (20.3x) 🟢 | --- | --- | --- | 10.695ms (1.0x) 🟠 |
Enqueue(2, 1000000) ²˒⁴ |
2.247ms (7.2x) | 0.340ms (47.5x) | 0.320ms (50.4x) 🟢 | --- | --- | --- | 16.149ms (1.0x) 🟠 |
Enqueue(4, 1000000) ²˒⁴ |
1.253ms (24.5x) | 0.221ms (138.5x) 🟢 | 0.228ms (134.8x) | --- | --- | --- | 30.659ms (1.0x) 🟠 |
² Benchmark run on parallel job workers - results may vary
³ EnqueueGrow(workers, insertions)
⁴ Enqueue(workers, insertions)
Queue
Functionality | NativeQueue (S) | NativeQueue (S+B) | NativeQueue (B) | UnsafeQueue (S) | UnsafeQueue (S+B) | UnsafeQueue (B) | Queue (BCL) |
---|---|---|---|---|---|---|---|
IsEmpty_x_100k(0) ¹ |
0.409ms (0.3x) 🟠 | 0.113ms (1.1x) | 0.076ms (1.6x) | 0.164ms (0.7x) | 0.000ms (300.8x) 🟢 | 0.001ms (240.6x) | 0.120ms (1.0x) |
IsEmpty_x_100k(100) ¹ |
0.450ms (0.3x) 🟠 | 0.114ms (1.1x) | 0.082ms (1.5x) | 0.184ms (0.7x) | 0.001ms (245.6x) 🟢 | 0.001ms (245.6x) 🟢 | 0.123ms (1.0x) |
Count_x_100k(0) ¹ |
0.348ms (0.3x) 🟠 | 0.103ms (1.0x) | 0.062ms (1.7x) | 0.123ms (0.8x) | 0.000ms (255.8x) 🟢 | 0.000ms (255.8x) 🟢 | 0.102ms (1.0x) |
Count_x_100k(100) ¹ |
0.368ms (0.3x) 🟠 | 0.113ms (0.9x) | 0.082ms (1.2x) | 0.143ms (0.7x) | 0.000ms (255.8x) 🟢 | 0.000ms (255.8x) 🟢 | 0.102ms (1.0x) |
ToNativeArray(10000) |
0.011ms (0.3x) | 0.010ms (0.3x) | 0.012ms (0.3x) | 0.009ms (0.4x) | 0.043ms (0.1x) 🟠 | 0.003ms (1.2x) 🟢 | 0.003ms (1.0x) |
ToNativeArray(100000) |
0.096ms (0.8x) | 0.021ms (3.9x) | 0.011ms (7.2x) | 0.107ms (0.8x) 🟠 | 0.008ms (10.6x) 🟢 | 0.008ms (10.1x) | 0.082ms (1.0x) |
ToNativeArray(1000000) |
1.047ms (0.8x) | 0.638ms (1.3x) | 0.317ms (2.5x) | 1.671ms (0.5x) 🟠 | 0.201ms (4.0x) | 0.172ms (4.6x) 🟢 | 0.798ms (1.0x) |
EnqueueGrow(10000) ³ |
0.052ms (0.7x) 🟠 | 0.017ms (2.3x) | 0.016ms (2.3x) | 0.037ms (1.0x) | 0.016ms (2.5x) 🟢 | 0.016ms (2.4x) | 0.038ms (1.0x) |
EnqueueGrow(100000) ³ |
0.580ms (0.8x) 🟠 | 0.203ms (2.2x) | 0.185ms (2.4x) | 0.412ms (1.1x) | 0.173ms (2.6x) 🟢 | 0.203ms (2.2x) | 0.444ms (1.0x) |
EnqueueGrow(1000000) ³ |
5.898ms (0.6x) 🟠 | 1.728ms (2.2x) | 1.492ms (2.5x) | 3.889ms (1.0x) | 1.484ms (2.5x) 🟢 | 1.501ms (2.5x) | 3.764ms (1.0x) |
Enqueue(10000) ⁴ |
0.053ms (0.7x) 🟠 | 0.009ms (4.3x) | 0.007ms (4.9x) 🟢 | 0.031ms (1.2x) | 0.007ms (4.9x) 🟢 | 0.008ms (4.9x) | 0.037ms (1.0x) |
Enqueue(100000) ⁴ |
0.561ms (0.6x) 🟠 | 0.080ms (4.4x) | 0.066ms (5.3x) | 0.310ms (1.1x) | 0.066ms (5.3x) 🟢 | 0.066ms (5.3x) | 0.353ms (1.0x) |
Enqueue(1000000) ⁴ |
5.452ms (0.6x) 🟠 | 0.799ms (4.2x) | 0.684ms (5.0x) | 3.174ms (1.1x) | 0.688ms (4.9x) | 0.683ms (5.0x) 🟢 | 3.390ms (1.0x) |
Dequeue(10000) |
0.052ms (0.5x) 🟠 | 0.017ms (1.4x) 🟢 | 0.017ms (1.4x) | 0.031ms (0.8x) | 0.017ms (1.4x) | 0.017ms (1.4x) 🟢 | 0.024ms (1.0x) |
Dequeue(100000) |
0.534ms (0.4x) 🟠 | 0.167ms (1.4x) | 0.166ms (1.4x) 🟢 | 0.292ms (0.8x) | 0.168ms (1.4x) | 0.169ms (1.4x) | 0.240ms (1.0x) |
Dequeue(1000000) |
5.258ms (0.5x) 🟠 | 1.668ms (1.4x) 🟢 | 1.691ms (1.4x) | 2.909ms (0.8x) | 1.683ms (1.4x) | 1.695ms (1.4x) | 2.377ms (1.0x) |
Peek(10000) ¹ |
0.027ms (0.6x) 🟠 | 0.011ms (1.5x) | 0.007ms (2.5x) | 0.008ms (2.0x) | 0.001ms (32.8x) 🟢 | 0.001ms (32.8x) 🟢 | 0.016ms (1.0x) |
Peek(100000) ¹ |
0.282ms (0.6x) 🟠 | 0.103ms (1.6x) | 0.063ms (2.6x) | 0.080ms (2.0x) | 0.001ms (182.1x) | 0.001ms (204.9x) 🟢 | 0.164ms (1.0x) |
Peek(1000000) ¹ |
2.814ms (0.6x) 🟠 | 1.048ms (1.6x) | 0.625ms (2.6x) | 0.819ms (2.0x) | 0.008ms (204.7x) | 0.006ms (292.4x) 🟢 | 1.637ms (1.0x) |
Foreach(10000) |
0.024ms (1.3x) | 0.005ms (6.6x) | 0.002ms (12.8x) 🟢 | 0.018ms (1.7x) | 0.003ms (11.4x) | 0.002ms (12.8x) 🟢 | 0.031ms (1.0x) 🟠 |
Foreach(100000) |
0.246ms (1.2x) | 0.043ms (7.1x) | 0.021ms (14.5x) | 0.180ms (1.7x) | 0.020ms (15.7x) 🟢 | 0.021ms (14.6x) | 0.307ms (1.0x) 🟠 |
Foreach(1000000) |
2.525ms (1.2x) | 0.507ms (5.8x) | 0.249ms (11.9x) | 1.824ms (1.6x) | 0.204ms (14.5x) 🟢 | 0.214ms (13.8x) | 2.955ms (1.0x) 🟠 |
¹ Optimizations were disabled to perform this benchmark
³ EnqueueGrow(insertions)
⁴ Enqueue(insertions)
RingQueue
Functionality | NativeRingQueue (S) | NativeRingQueue (S+B) | NativeRingQueue (B) | UnsafeRingQueue (S) | UnsafeRingQueue (S+B) | UnsafeRingQueue (B) | Queue (BCL) |
---|---|---|---|---|---|---|---|
IsEmpty_x_100k(0) ¹ |
0.123ms (0.7x) 🟠 | 0.037ms (2.2x) | 0.037ms (2.2x) | 0.100ms (0.8x) | 0.025ms (3.2x) 🟢 | 0.025ms (3.2x) | 0.080ms (1.0x) |
IsEmpty_x_100k(100) ¹ |
0.123ms (0.7x) 🟠 | 0.036ms (2.2x) | 0.037ms (2.2x) | 0.100ms (0.8x) | 0.025ms (3.2x) 🟢 | 0.025ms (3.2x) | 0.080ms (1.0x) |
Count_x_100k(0) ¹ |
0.201ms (0.5x) 🟠 | 0.080ms (1.2x) | 0.025ms (4.0x) 🟢 | 0.082ms (1.2x) | 0.025ms (4.0x) 🟢 | 0.026ms (3.9x) | 0.100ms (1.0x) |
Count_x_100k(100) ¹ |
0.201ms (0.5x) 🟠 | 0.081ms (1.2x) | 0.025ms (4.0x) | 0.082ms (1.2x) | 0.025ms (4.0x) | 0.025ms (4.0x) 🟢 | 0.100ms (1.0x) |
Enqueue(10000) |
0.023ms (1.2x) | 0.019ms (1.5x) | 0.009ms (3.2x) 🟢 | 0.017ms (1.6x) | 0.019ms (1.5x) | 0.019ms (1.5x) | 0.028ms (1.0x) 🟠 |
Enqueue(100000) |
0.227ms (1.1x) | 0.188ms (1.4x) | 0.084ms (3.1x) 🟢 | 0.174ms (1.5x) | 0.184ms (1.4x) | 0.183ms (1.4x) | 0.260ms (1.0x) 🟠 |
Enqueue(1000000) |
2.329ms (1.1x) | 1.864ms (1.4x) | 0.837ms (3.2x) 🟢 | 1.711ms (1.5x) | 1.852ms (1.4x) | 1.865ms (1.4x) | 2.649ms (1.0x) 🟠 |
Dequeue(10000) |
0.022ms (1.1x) | 0.019ms (1.3x) | 0.005ms (4.6x) | 0.018ms (1.4x) | 0.006ms (4.2x) | 0.005ms (4.6x) 🟢 | 0.025ms (1.0x) 🟠 |
Dequeue(100000) |
0.241ms (1.0x) | 0.186ms (1.3x) | 0.052ms (4.8x) 🟢 | 0.180ms (1.4x) | 0.057ms (4.3x) | 0.052ms (4.8x) 🟢 | 0.246ms (1.0x) 🟠 |
Dequeue(1000000) |
2.479ms (1.0x) 🟠 | 1.871ms (1.3x) | 0.528ms (4.6x) | 1.945ms (1.2x) | 0.571ms (4.2x) | 0.502ms (4.8x) 🟢 | 2.423ms (1.0x) |
¹ Optimizations were disabled to perform this benchmark