Skip to content

Collect

wuke32767 edited this page Aug 6, 2026 · 4 revisions

d59498a4a95625ccf8033f69a0514e3dfac8dfe5


BenchmarkDotNet v0.14.0, Ubuntu 24.04.4 LTS (Noble Numbat)
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]     : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2
  DefaultJob : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2


CollectCWTEmpty

create a cwt that has 10000 dead keys. (create an array that holds 10000 objects to keep the same as below test.)

(still not the same as below test.)

Method Mean Error StdDev
GC0 58.31 μs 2.631 μs 7.757 μs
GC1 63.02 μs 2.880 μs 8.491 μs
GC2 204.67 μs 4.020 μs 5.084 μs

CollectCWT

create a cwt that has 10000 keys. (create an array that holds 10000 objects to keep keys alive.)

Method Mean Error StdDev
GC0 175.0 μs 3.48 μs 6.00 μs
GC1 172.0 μs 3.21 μs 4.60 μs
GC2 441.7 μs 7.52 μs 7.03 μs

CollectArray

create arrays that total length is 100_000 and have 10000 objects. (create an array that holds 10000 objects to keep the same as above test.)

Method Mean Error StdDev Median
GC0 41.24 μs 2.794 μs 8.239 μs 39.15 μs
GC1 41.70 μs 2.313 μs 6.820 μs 39.17 μs
GC2 407.02 μs 6.748 μs 6.313 μs 405.63 μs

CollectArrayLOH

create an array that length is 100_000 and has 10000 objects. (create an array that holds 10000 objects to keep the same as above test.)

Method Mean Error StdDev Median
GC0 40.30 μs 2.728 μs 8.044 μs 36.86 μs
GC1 41.14 μs 2.015 μs 5.847 μs 40.13 μs
GC2 298.16 μs 5.949 μs 8.720 μs 297.88 μs

CollectCWTEmpty

// * Detailed results *

CollectCWTEmpty.GC0: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 58.307 μs, StdErr = 0.776 μs (1.33%), N = 100, StdDev = 7.757 μs

Min = 47.843 μs, Q1 = 51.417 μs, Median = 56.790 μs, Q3 = 64.040 μs, Max = 75.706 μs

IQR = 12.623 μs, LowerFence = 32.482 μs, UpperFence = 82.974 μs

ConfidenceInterval = [55.676 μs; 60.937 μs] (CI 99.9%), Margin = 2.631 μs (4.51% of Mean)

Skewness = 0.56, Kurtosis = 2.03, MValue = 3

-------------------- Histogram --------------------

[45.649 μs ; 49.353 μs) | @@@@

[49.353 μs ; 53.739 μs) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[53.739 μs ; 58.371 μs) | @@@@@@@@

[58.371 μs ; 62.757 μs) | @@@@@@@@@@@@@@@@@@@@

[62.757 μs ; 65.264 μs) | @@@@@

[65.264 μs ; 70.731 μs) | @@@@@@@@@@@@@

[70.731 μs ; 75.118 μs) | @@@@@@@@@

[75.118 μs ; 77.900 μs) | @


CollectCWTEmpty.GC1: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 63.016 μs, StdErr = 0.849 μs (1.35%), N = 100, StdDev = 8.491 μs

Min = 48.768 μs, Q1 = 55.878 μs, Median = 63.835 μs, Q3 = 69.166 μs, Max = 80.746 μs

IQR = 13.288 μs, LowerFence = 35.945 μs, UpperFence = 89.099 μs

ConfidenceInterval = [60.136 μs; 65.896 μs] (CI 99.9%), Margin = 2.880 μs (4.57% of Mean)

Skewness = 0.06, Kurtosis = 1.94, MValue = 3.58

-------------------- Histogram --------------------

[48.592 μs ; 53.394 μs) | @@@@@@@@@@@@@@@@@@@@

[53.394 μs ; 58.402 μs) | @@@@@@@@@@@@@@@@@

[58.402 μs ; 63.355 μs) | @@@@@@@@

[63.355 μs ; 68.157 μs) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@

[68.157 μs ; 72.776 μs) | @@@@@@@@@@

[72.776 μs ; 77.578 μs) | @@@@@@@@@@@@@@@

[77.578 μs ; 83.147 μs) | @@


CollectCWTEmpty.GC2: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 204.666 μs, StdErr = 1.060 μs (0.52%), N = 23, StdDev = 5.084 μs

Min = 196.592 μs, Q1 = 199.494 μs, Median = 206.163 μs, Q3 = 208.528 μs, Max = 213.688 μs

IQR = 9.034 μs, LowerFence = 185.943 μs, UpperFence = 222.079 μs

ConfidenceInterval = [200.647 μs; 208.686 μs] (CI 99.9%), Margin = 4.020 μs (1.96% of Mean)

Skewness = -0.06, Kurtosis = 1.67, MValue = 2.6

-------------------- Histogram --------------------

[195.701 μs ; 200.394 μs) | @@@@@@@

[200.394 μs ; 205.879 μs) | @@@@

[205.879 μs ; 210.571 μs) | @@@@@@@@@@

[210.571 μs ; 216.034 μs) | @@


// * Summary *

BenchmarkDotNet v0.14.0, Ubuntu 24.04.4 LTS (Noble Numbat)

AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores

.NET SDK 10.0.302

[Host] : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2

DefaultJob : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2

| Method | Mean | Error | StdDev |

|------- |----------:|---------:|---------:|

| GC0 | 58.31 μs | 2.631 μs | 7.757 μs |

| GC1 | 63.02 μs | 2.880 μs | 8.491 μs |

| GC2 | 204.67 μs | 4.020 μs | 5.084 μs |

// * Warnings *

MultimodalDistribution

CollectCWTEmpty.GC0: Default -> It seems that the distribution can have several modes (mValue = 3)

CollectCWTEmpty.GC1: Default -> It seems that the distribution is bimodal (mValue = 3.58)

// * Legends *

Mean : Arithmetic mean of all measurements

Error : Half of 99.9% confidence interval

StdDev : Standard deviation of all measurements

1 μs : 1 Microsecond (0.000001 sec)

// ***** BenchmarkRunner: End *****

Run time: 00:03:11 (191.04 sec), executed benchmarks: 3

Global total time: 00:03:17 (197.77 sec), executed benchmarks: 3

// * Artifacts cleanup *

Artifacts cleanup is finished

CollectCWT

// * Detailed results *

CollectCWT.GC0: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 174.955 μs, StdErr = 0.974 μs (0.56%), N = 38, StdDev = 6.001 μs

Min = 161.152 μs, Q1 = 171.228 μs, Median = 174.756 μs, Q3 = 178.744 μs, Max = 187.966 μs

IQR = 7.516 μs, LowerFence = 159.954 μs, UpperFence = 190.018 μs

ConfidenceInterval = [171.476 μs; 178.434 μs] (CI 99.9%), Margin = 3.479 μs (1.99% of Mean)

Skewness = -0.07, Kurtosis = 2.67, MValue = 2.4

-------------------- Histogram --------------------

[159.390 μs ; 164.075 μs) | @@

[164.075 μs ; 171.172 μs) | @@@@@@@

[171.172 μs ; 175.857 μs) | @@@@@@@@@@@@@@@

[175.857 μs ; 179.922 μs) | @@@@@

[179.922 μs ; 185.623 μs) | @@@@@@@@

[185.623 μs ; 190.309 μs) | @


CollectCWT.GC1: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 171.967 μs, StdErr = 0.869 μs (0.51%), N = 28, StdDev = 4.599 μs

Min = 162.205 μs, Q1 = 168.963 μs, Median = 172.161 μs, Q3 = 174.873 μs, Max = 179.755 μs

IQR = 5.910 μs, LowerFence = 160.098 μs, UpperFence = 183.738 μs

ConfidenceInterval = [168.760 μs; 175.174 μs] (CI 99.9%), Margin = 3.207 μs (1.86% of Mean)

Skewness = -0.25, Kurtosis = 2.41, MValue = 2

-------------------- Histogram --------------------

[160.217 μs ; 165.452 μs) | @@

[165.452 μs ; 170.166 μs) | @@@@@@

[170.166 μs ; 174.142 μs) | @@@@@@@@@@@@

[174.142 μs ; 179.852 μs) | @@@@@@@@


CollectCWT.GC2: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 441.686 μs, StdErr = 1.816 μs (0.41%), N = 15, StdDev = 7.034 μs

Min = 430.910 μs, Q1 = 436.085 μs, Median = 439.618 μs, Q3 = 446.623 μs, Max = 454.809 μs

IQR = 10.537 μs, LowerFence = 420.280 μs, UpperFence = 462.428 μs

ConfidenceInterval = [434.166 μs; 449.205 μs] (CI 99.9%), Margin = 7.520 μs (1.70% of Mean)

Skewness = 0.23, Kurtosis = 1.73, MValue = 2

-------------------- Histogram --------------------

[427.166 μs ; 440.700 μs) | @@@@@@@@

[440.700 μs ; 458.552 μs) | @@@@@@@


// * Summary *

BenchmarkDotNet v0.14.0, Ubuntu 24.04.4 LTS (Noble Numbat)

AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores

.NET SDK 10.0.302

[Host] : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2

DefaultJob : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2

| Method | Mean | Error | StdDev |

|------- |---------:|--------:|--------:|

| GC0 | 175.0 μs | 3.48 μs | 6.00 μs |

| GC1 | 172.0 μs | 3.21 μs | 4.60 μs |

| GC2 | 441.7 μs | 7.52 μs | 7.03 μs |

// * Hints *

Outliers

CollectCWT.GC1: Default -> 1 outlier was removed (185.54 μs)

// * Legends *

Mean : Arithmetic mean of all measurements

Error : Half of 99.9% confidence interval

StdDev : Standard deviation of all measurements

1 μs : 1 Microsecond (0.000001 sec)

// ***** BenchmarkRunner: End *****

Run time: 00:01:23 (83.71 sec), executed benchmarks: 3

Global total time: 00:01:29 (89.53 sec), executed benchmarks: 3

// * Artifacts cleanup *

Artifacts cleanup is finished

CollectArray

// * Detailed results *

CollectArray.GC0: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 41.241 μs, StdErr = 0.824 μs (2.00%), N = 100, StdDev = 8.239 μs

Min = 32.122 μs, Q1 = 34.028 μs, Median = 39.152 μs, Q3 = 46.424 μs, Max = 61.018 μs

IQR = 12.396 μs, LowerFence = 15.434 μs, UpperFence = 65.018 μs

ConfidenceInterval = [38.447 μs; 44.035 μs] (CI 99.9%), Margin = 2.794 μs (6.78% of Mean)

Skewness = 0.78, Kurtosis = 2.34, MValue = 3.37

-------------------- Histogram --------------------

[31.530 μs ; 36.190 μs) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[36.190 μs ; 38.371 μs) | @@@@@

[38.371 μs ; 43.031 μs) | @@@@@@@@@@@@@@@@@@@@@

[43.031 μs ; 47.257 μs) | @@@@@@@@@@@

[47.257 μs ; 51.294 μs) | @@

[51.294 μs ; 56.646 μs) | @@@@@@@@@@@@@@

[56.646 μs ; 61.305 μs) | @@@@@@


CollectArray.GC1: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 41.701 μs, StdErr = 0.682 μs (1.64%), N = 100, StdDev = 6.820 μs

Min = 33.724 μs, Q1 = 36.304 μs, Median = 39.169 μs, Q3 = 46.859 μs, Max = 61.442 μs

IQR = 10.554 μs, LowerFence = 20.473 μs, UpperFence = 62.690 μs

ConfidenceInterval = [39.389 μs; 44.014 μs] (CI 99.9%), Margin = 2.313 μs (5.55% of Mean)

Skewness = 0.91, Kurtosis = 2.83, MValue = 3

-------------------- Histogram --------------------

[31.795 μs ; 34.503 μs) | @@@@@@

[34.503 μs ; 38.360 μs) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[38.360 μs ; 42.293 μs) | @@@@@@@@@@@@@@@@@@@

[42.293 μs ; 46.035 μs) | @@@@@@@@@

[46.035 μs ; 49.892 μs) | @@@@@@@@@@@@@@

[49.892 μs ; 51.245 μs) |

[51.245 μs ; 55.102 μs) | @@@@@@@@@@@

[55.102 μs ; 58.019 μs) |

[58.019 μs ; 61.875 μs) | @@@


CollectArray.GC2: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 407.020 μs, StdErr = 1.630 μs (0.40%), N = 15, StdDev = 6.313 μs

Min = 396.892 μs, Q1 = 403.265 μs, Median = 405.634 μs, Q3 = 411.446 μs, Max = 419.760 μs

IQR = 8.181 μs, LowerFence = 390.993 μs, UpperFence = 423.718 μs

ConfidenceInterval = [400.271 μs; 413.768 μs] (CI 99.9%), Margin = 6.748 μs (1.66% of Mean)

Skewness = 0.27, Kurtosis = 2.06, MValue = 2

-------------------- Histogram --------------------

[394.696 μs ; 410.828 μs) | @@@@@@@@@@@

[410.828 μs ; 423.119 μs) | @@@@


// * Summary *

BenchmarkDotNet v0.14.0, Ubuntu 24.04.4 LTS (Noble Numbat)

AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores

.NET SDK 10.0.302

[Host] : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2

DefaultJob : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2

| Method | Mean | Error | StdDev | Median |

|------- |----------:|---------:|---------:|----------:|

| GC0 | 41.24 μs | 2.794 μs | 8.239 μs | 39.15 μs |

| GC1 | 41.70 μs | 2.313 μs | 6.820 μs | 39.17 μs |

| GC2 | 407.02 μs | 6.748 μs | 6.313 μs | 405.63 μs |

// * Warnings *

MultimodalDistribution

CollectArray.GC0: Default -> It seems that the distribution is bimodal (mValue = 3.37)

CollectArray.GC1: Default -> It seems that the distribution can have several modes (mValue = 3)

// * Legends *

Mean : Arithmetic mean of all measurements

Error : Half of 99.9% confidence interval

StdDev : Standard deviation of all measurements

Median : Value separating the higher half of all measurements (50th percentile)

1 μs : 1 Microsecond (0.000001 sec)

// ***** BenchmarkRunner: End *****

Run time: 00:02:50 (170.96 sec), executed benchmarks: 3

Global total time: 00:02:56 (176.66 sec), executed benchmarks: 3

// * Artifacts cleanup *

Artifacts cleanup is finished

CollectArrayLOH

// * Detailed results *

CollectArrayLOH.GC0: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 40.299 μs, StdErr = 0.804 μs (2.00%), N = 100, StdDev = 8.044 μs

Min = 31.496 μs, Q1 = 33.692 μs, Median = 36.857 μs, Q3 = 45.966 μs, Max = 60.272 μs

IQR = 12.274 μs, LowerFence = 15.281 μs, UpperFence = 64.377 μs

ConfidenceInterval = [37.571 μs; 43.027 μs] (CI 99.9%), Margin = 2.728 μs (6.77% of Mean)

Skewness = 0.83, Kurtosis = 2.34, MValue = 2.6

-------------------- Histogram --------------------

[29.221 μs ; 31.969 μs) | @@@

[31.969 μs ; 37.186 μs) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[37.186 μs ; 41.736 μs) | @@@@@@@@@@@@@@@@

[41.736 μs ; 46.106 μs) | @@@@@@@@@

[46.106 μs ; 47.636 μs) |

[47.636 μs ; 52.185 μs) | @@@@@@@@@@@@@@

[52.185 μs ; 57.479 μs) | @@@@@@@@@

[57.479 μs ; 62.547 μs) | @@


CollectArrayLOH.GC1: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 41.135 μs, StdErr = 0.594 μs (1.44%), N = 97, StdDev = 5.847 μs

Min = 32.766 μs, Q1 = 36.530 μs, Median = 40.132 μs, Q3 = 43.993 μs, Max = 57.356 μs

IQR = 7.463 μs, LowerFence = 25.336 μs, UpperFence = 55.187 μs

ConfidenceInterval = [39.120 μs; 43.151 μs] (CI 99.9%), Margin = 2.015 μs (4.90% of Mean)

Skewness = 0.93, Kurtosis = 3.11, MValue = 3.79

-------------------- Histogram --------------------

[31.095 μs ; 34.395 μs) | @@@@@

[34.395 μs ; 37.735 μs) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[37.735 μs ; 42.097 μs) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[42.097 μs ; 44.785 μs) | @@@@@

[44.785 μs ; 48.125 μs) | @@@@@@@@@@

[48.125 μs ; 52.539 μs) | @@@@@@@@@

[52.539 μs ; 54.254 μs) | @

[54.254 μs ; 57.594 μs) | @@@@


CollectArrayLOH.GC2: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 298.163 μs, StdErr = 1.619 μs (0.54%), N = 29, StdDev = 8.720 μs

Min = 285.063 μs, Q1 = 290.269 μs, Median = 297.883 μs, Q3 = 303.166 μs, Max = 316.905 μs

IQR = 12.897 μs, LowerFence = 270.924 μs, UpperFence = 322.512 μs

ConfidenceInterval = [292.214 μs; 304.112 μs] (CI 99.9%), Margin = 5.949 μs (2.00% of Mean)

Skewness = 0.4, Kurtosis = 2.07, MValue = 2

-------------------- Histogram --------------------

[281.338 μs ; 288.082 μs) | @@

[288.082 μs ; 295.533 μs) | @@@@@@@@@@@

[295.533 μs ; 303.716 μs) | @@@@@@@@@

[303.716 μs ; 313.764 μs) | @@@@@@

[313.764 μs ; 320.631 μs) | @


// * Summary *

BenchmarkDotNet v0.14.0, Ubuntu 24.04.4 LTS (Noble Numbat)

AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores

.NET SDK 10.0.302

[Host] : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2

DefaultJob : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX2

| Method | Mean | Error | StdDev | Median |

|------- |----------:|---------:|---------:|----------:|

| GC0 | 40.30 μs | 2.728 μs | 8.044 μs | 36.86 μs |

| GC1 | 41.14 μs | 2.015 μs | 5.847 μs | 40.13 μs |

| GC2 | 298.16 μs | 5.949 μs | 8.720 μs | 297.88 μs |

// * Warnings *

MultimodalDistribution

CollectArrayLOH.GC1: Default -> It seems that the distribution is bimodal (mValue = 3.79)

// * Hints *

Outliers

CollectArrayLOH.GC1: Default -> 3 outliers were removed (60.54 μs..64.34 μs)

CollectArrayLOH.GC2: Default -> 1 outlier was removed (331.45 μs)

// * Legends *

Mean : Arithmetic mean of all measurements

Error : Half of 99.9% confidence interval

StdDev : Standard deviation of all measurements

Median : Value separating the higher half of all measurements (50th percentile)

1 μs : 1 Microsecond (0.000001 sec)

// ***** BenchmarkRunner: End *****

Run time: 00:02:52 (172.93 sec), executed benchmarks: 3

Global total time: 00:02:58 (178.72 sec), executed benchmarks: 3

// * Artifacts cleanup *

Artifacts cleanup is finished

Clone this wiki locally