Skip to content
wuke32767 edited this page Aug 6, 2026 · 5 revisions

b0f6a328faec939e43d4f9f3ab960a66670c2e13

Test the performance of ComponentList.

CWT postfix means it's implemented with conditional weak table.

List postfix means it's implemented with entity list.

Hell postfix means there's many data.

NeverHashed means the key is not in cwt and not assigned a hash.

Prefix means it checks which type.

A is root type.

type B and C is in collection, and directly inherit A.

type D is in collection, and inherits _D which inherits A.

type E and F is not in collection.

E is assigned a hash.

Obviously is index into array directly.


BenchmarkDotNet v0.14.0, Ubuntu 24.04.4 LTS (Noble Numbat)
Intel Xeon Platinum 8370C CPU 2.80GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 10.0.302
  [Host]     : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
  DefaultJob : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI


Method Mean Error StdDev
Padding 0.0005 ns 0.0005 ns 0.0004 ns
B_CWT 8.4611 ns 0.0247 ns 0.0231 ns
C_CWT 8.1916 ns 0.0166 ns 0.0139 ns
E_CWT 3.2222 ns 0.0053 ns 0.0047 ns
F_CWT_NeverHashed 2.8690 ns 0.0312 ns 0.0292 ns
B_CWTHell 8.7358 ns 0.0263 ns 0.0234 ns
C_CWTHell 7.2558 ns 0.0156 ns 0.0146 ns
E_CWTHell 3.2270 ns 0.0094 ns 0.0088 ns
F_CWTHell_NeverHashed 3.2148 ns 0.0141 ns 0.0125 ns
Fa_CWTHell 12.3452 ns 0.1722 ns 0.1611 ns
B_List 2.6121 ns 0.0148 ns 0.0131 ns
D_List 11.0186 ns 0.0397 ns 0.0371 ns
E_List 10.7810 ns 0.0537 ns 0.0502 ns
C_ListHell 5.7986 ns 0.0091 ns 0.0085 ns
E_ListHell (in the middle of the collection) 64.6326 ns 0.0228 ns 0.0202 ns
F_ListHell 106.4285 ns 0.1768 ns 0.1654 ns
Obviously 1.0035 ns 0.0132 ns 0.0124 ns

// * Detailed results *

Hate.Padding: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 0.000 ns, StdErr = 0.000 ns (22.76%), N = 15, StdDev = 0.000 ns

Min = 0.000 ns, Q1 = 0.000 ns, Median = 0.001 ns, Q3 = 0.001 ns, Max = 0.001 ns

IQR = 0.001 ns, LowerFence = -0.001 ns, UpperFence = 0.002 ns

ConfidenceInterval = [0.000 ns; 0.001 ns] (CI 99.9%), Margin = 0.000 ns (94.22% of Mean)

Skewness = 0.16, Kurtosis = 1.58, MValue = 2

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

[-0.000 ns ; 0.000 ns) | @@@@@@

[ 0.000 ns ; 0.001 ns) | @@@@@@@

[ 0.001 ns ; 0.001 ns) | @@


Hate.B_CWT: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 8.461 ns, StdErr = 0.006 ns (0.07%), N = 15, StdDev = 0.023 ns

Min = 8.413 ns, Q1 = 8.449 ns, Median = 8.454 ns, Q3 = 8.475 ns, Max = 8.498 ns

IQR = 0.026 ns, LowerFence = 8.410 ns, UpperFence = 8.514 ns

ConfidenceInterval = [8.436 ns; 8.486 ns] (CI 99.9%), Margin = 0.025 ns (0.29% of Mean)

Skewness = 0.06, Kurtosis = 2.42, MValue = 2

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

[8.400 ns ; 8.510 ns) | @@@@@@@@@@@@@@@


Hate.C_CWT: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 8.192 ns, StdErr = 0.004 ns (0.05%), N = 13, StdDev = 0.014 ns

Min = 8.164 ns, Q1 = 8.184 ns, Median = 8.196 ns, Q3 = 8.197 ns, Max = 8.221 ns

IQR = 0.014 ns, LowerFence = 8.163 ns, UpperFence = 8.218 ns

ConfidenceInterval = [8.175 ns; 8.208 ns] (CI 99.9%), Margin = 0.017 ns (0.20% of Mean)

Skewness = 0.12, Kurtosis = 2.92, MValue = 2

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

[8.156 ns ; 8.229 ns) | @@@@@@@@@@@@@


Hate.E_CWT: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 3.222 ns, StdErr = 0.001 ns (0.04%), N = 14, StdDev = 0.005 ns

Min = 3.217 ns, Q1 = 3.218 ns, Median = 3.222 ns, Q3 = 3.224 ns, Max = 3.233 ns

IQR = 0.006 ns, LowerFence = 3.210 ns, UpperFence = 3.233 ns

ConfidenceInterval = [3.217 ns; 3.228 ns] (CI 99.9%), Margin = 0.005 ns (0.16% of Mean)

Skewness = 0.82, Kurtosis = 2.7, MValue = 2

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

[3.214 ns ; 3.236 ns) | @@@@@@@@@@@@@@


Hate.F_CWT_NeverHashed: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 2.869 ns, StdErr = 0.008 ns (0.26%), N = 15, StdDev = 0.029 ns

Min = 2.784 ns, Q1 = 2.862 ns, Median = 2.872 ns, Q3 = 2.883 ns, Max = 2.904 ns

IQR = 0.021 ns, LowerFence = 2.829 ns, UpperFence = 2.915 ns

ConfidenceInterval = [2.838 ns; 2.900 ns] (CI 99.9%), Margin = 0.031 ns (1.09% of Mean)

Skewness = -1.47, Kurtosis = 5.17, MValue = 2

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

[2.768 ns ; 2.842 ns) | @

[2.842 ns ; 2.920 ns) | @@@@@@@@@@@@@@


Hate.B_CWTHell: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 8.736 ns, StdErr = 0.006 ns (0.07%), N = 14, StdDev = 0.023 ns

Min = 8.715 ns, Q1 = 8.718 ns, Median = 8.725 ns, Q3 = 8.742 ns, Max = 8.787 ns

IQR = 0.024 ns, LowerFence = 8.682 ns, UpperFence = 8.778 ns

ConfidenceInterval = [8.709 ns; 8.762 ns] (CI 99.9%), Margin = 0.026 ns (0.30% of Mean)

Skewness = 0.95, Kurtosis = 2.42, MValue = 2

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

[8.703 ns ; 8.800 ns) | @@@@@@@@@@@@@@


Hate.C_CWTHell: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 7.256 ns, StdErr = 0.004 ns (0.05%), N = 15, StdDev = 0.015 ns

Min = 7.230 ns, Q1 = 7.246 ns, Median = 7.257 ns, Q3 = 7.265 ns, Max = 7.285 ns

IQR = 0.019 ns, LowerFence = 7.217 ns, UpperFence = 7.294 ns

ConfidenceInterval = [7.240 ns; 7.271 ns] (CI 99.9%), Margin = 0.016 ns (0.22% of Mean)

Skewness = 0.06, Kurtosis = 2.16, MValue = 2

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

[7.222 ns ; 7.293 ns) | @@@@@@@@@@@@@@@


Hate.E_CWTHell: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 3.227 ns, StdErr = 0.002 ns (0.07%), N = 15, StdDev = 0.009 ns

Min = 3.217 ns, Q1 = 3.220 ns, Median = 3.225 ns, Q3 = 3.232 ns, Max = 3.245 ns

IQR = 0.012 ns, LowerFence = 3.202 ns, UpperFence = 3.249 ns

ConfidenceInterval = [3.218 ns; 3.236 ns] (CI 99.9%), Margin = 0.009 ns (0.29% of Mean)

Skewness = 0.65, Kurtosis = 2.03, MValue = 2

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

[3.212 ns ; 3.249 ns) | @@@@@@@@@@@@@@@


Hate.F_CWTHell_NeverHashed: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 3.215 ns, StdErr = 0.003 ns (0.10%), N = 14, StdDev = 0.012 ns

Min = 3.200 ns, Q1 = 3.209 ns, Median = 3.212 ns, Q3 = 3.216 ns, Max = 3.243 ns

IQR = 0.007 ns, LowerFence = 3.198 ns, UpperFence = 3.226 ns

ConfidenceInterval = [3.201 ns; 3.229 ns] (CI 99.9%), Margin = 0.014 ns (0.44% of Mean)

Skewness = 0.93, Kurtosis = 2.75, MValue = 2

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

[3.194 ns ; 3.250 ns) | @@@@@@@@@@@@@@


Hate.Fa_CWTHell: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 12.345 ns, StdErr = 0.042 ns (0.34%), N = 15, StdDev = 0.161 ns

Min = 12.169 ns, Q1 = 12.194 ns, Median = 12.316 ns, Q3 = 12.526 ns, Max = 12.566 ns

IQR = 0.331 ns, LowerFence = 11.697 ns, UpperFence = 13.023 ns

ConfidenceInterval = [12.173 ns; 12.517 ns] (CI 99.9%), Margin = 0.172 ns (1.39% of Mean)

Skewness = 0.19, Kurtosis = 1.12, MValue = 2

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

[12.120 ns ; 12.628 ns) | @@@@@@@@@@@@@@@


Hate.B_List: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 2.612 ns, StdErr = 0.003 ns (0.13%), N = 14, StdDev = 0.013 ns

Min = 2.598 ns, Q1 = 2.603 ns, Median = 2.606 ns, Q3 = 2.617 ns, Max = 2.639 ns

IQR = 0.013 ns, LowerFence = 2.583 ns, UpperFence = 2.637 ns

ConfidenceInterval = [2.597 ns; 2.627 ns] (CI 99.9%), Margin = 0.015 ns (0.57% of Mean)

Skewness = 0.93, Kurtosis = 2.28, MValue = 2

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

[2.591 ns ; 2.646 ns) | @@@@@@@@@@@@@@


Hate.D_List: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 11.019 ns, StdErr = 0.010 ns (0.09%), N = 15, StdDev = 0.037 ns

Min = 10.966 ns, Q1 = 10.985 ns, Median = 11.016 ns, Q3 = 11.046 ns, Max = 11.096 ns

IQR = 0.061 ns, LowerFence = 10.894 ns, UpperFence = 11.137 ns

ConfidenceInterval = [10.979 ns; 11.058 ns] (CI 99.9%), Margin = 0.040 ns (0.36% of Mean)

Skewness = 0.28, Kurtosis = 2, MValue = 2

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

[10.946 ns ; 11.116 ns) | @@@@@@@@@@@@@@@


Hate.E_List: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 10.781 ns, StdErr = 0.013 ns (0.12%), N = 15, StdDev = 0.050 ns

Min = 10.700 ns, Q1 = 10.736 ns, Median = 10.780 ns, Q3 = 10.825 ns, Max = 10.845 ns

IQR = 0.089 ns, LowerFence = 10.603 ns, UpperFence = 10.958 ns

ConfidenceInterval = [10.727 ns; 10.835 ns] (CI 99.9%), Margin = 0.054 ns (0.50% of Mean)

Skewness = -0.12, Kurtosis = 1.3, MValue = 2

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

[10.673 ns ; 10.872 ns) | @@@@@@@@@@@@@@@


Hate.C_ListHell: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 5.799 ns, StdErr = 0.002 ns (0.04%), N = 15, StdDev = 0.008 ns

Min = 5.785 ns, Q1 = 5.792 ns, Median = 5.800 ns, Q3 = 5.806 ns, Max = 5.812 ns

IQR = 0.014 ns, LowerFence = 5.771 ns, UpperFence = 5.828 ns

ConfidenceInterval = [5.789 ns; 5.808 ns] (CI 99.9%), Margin = 0.009 ns (0.16% of Mean)

Skewness = -0.16, Kurtosis = 1.68, MValue = 2

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

[5.780 ns ; 5.817 ns) | @@@@@@@@@@@@@@@


Hate.E_ListHell: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 64.633 ns, StdErr = 0.005 ns (0.01%), N = 14, StdDev = 0.020 ns

Min = 64.592 ns, Q1 = 64.627 ns, Median = 64.634 ns, Q3 = 64.644 ns, Max = 64.671 ns

IQR = 0.017 ns, LowerFence = 64.602 ns, UpperFence = 64.670 ns

ConfidenceInterval = [64.610 ns; 64.655 ns] (CI 99.9%), Margin = 0.023 ns (0.04% of Mean)

Skewness = -0.29, Kurtosis = 2.57, MValue = 2

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

[64.581 ns ; 64.683 ns) | @@@@@@@@@@@@@@


Hate.F_ListHell: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 106.428 ns, StdErr = 0.043 ns (0.04%), N = 15, StdDev = 0.165 ns

Min = 106.208 ns, Q1 = 106.322 ns, Median = 106.401 ns, Q3 = 106.529 ns, Max = 106.800 ns

IQR = 0.207 ns, LowerFence = 106.012 ns, UpperFence = 106.839 ns

ConfidenceInterval = [106.252 ns; 106.605 ns] (CI 99.9%), Margin = 0.177 ns (0.17% of Mean)

Skewness = 0.58, Kurtosis = 2.46, MValue = 2

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

[106.120 ns ; 106.888 ns) | @@@@@@@@@@@@@@@


Hate.Obviously: DefaultJob

Runtime = .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI; GC = Concurrent Workstation

Mean = 1.004 ns, StdErr = 0.003 ns (0.32%), N = 15, StdDev = 0.012 ns

Min = 0.983 ns, Q1 = 0.995 ns, Median = 1.004 ns, Q3 = 1.012 ns, Max = 1.024 ns

IQR = 0.017 ns, LowerFence = 0.970 ns, UpperFence = 1.037 ns

ConfidenceInterval = [0.990 ns; 1.017 ns] (CI 99.9%), Margin = 0.013 ns (1.32% of Mean)

Skewness = 0.08, Kurtosis = 1.81, MValue = 2

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

[0.976 ns ; 1.027 ns) | @@@@@@@@@@@@@@@


// * Summary *

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

Intel Xeon Platinum 8370C CPU 2.80GHz, 1 CPU, 4 logical and 2 physical cores

.NET SDK 10.0.302

[Host] : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI

DefaultJob : .NET 9.0.18 (9.0.1826.31522), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI

| Method | Mean | Error | StdDev |

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

| Padding | 0.0005 ns | 0.0005 ns | 0.0004 ns |

| B_CWT | 8.4611 ns | 0.0247 ns | 0.0231 ns |

| C_CWT | 8.1916 ns | 0.0166 ns | 0.0139 ns |

| E_CWT | 3.2222 ns | 0.0053 ns | 0.0047 ns |

| F_CWT_NeverHashed | 2.8690 ns | 0.0312 ns | 0.0292 ns |

| B_CWTHell | 8.7358 ns | 0.0263 ns | 0.0234 ns |

| C_CWTHell | 7.2558 ns | 0.0156 ns | 0.0146 ns |

| E_CWTHell | 3.2270 ns | 0.0094 ns | 0.0088 ns |

| F_CWTHell_NeverHashed | 3.2148 ns | 0.0141 ns | 0.0125 ns |

| Fa_CWTHell | 12.3452 ns | 0.1722 ns | 0.1611 ns |

| B_List | 2.6121 ns | 0.0148 ns | 0.0131 ns |

| D_List | 11.0186 ns | 0.0397 ns | 0.0371 ns |

| E_List | 10.7810 ns | 0.0537 ns | 0.0502 ns |

| C_ListHell | 5.7986 ns | 0.0091 ns | 0.0085 ns |

| E_ListHell | 64.6326 ns | 0.0228 ns | 0.0202 ns |

| F_ListHell | 106.4285 ns | 0.1768 ns | 0.1654 ns |

| Obviously | 1.0035 ns | 0.0132 ns | 0.0124 ns |

// * Warnings *

ZeroMeasurement

Hate.Padding: Default -> The method duration is indistinguishable from the empty method duration

// * Hints *

Outliers

Hate.C_CWT: Default -> 2 outliers were removed (12.59 ns, 12.65 ns)

Hate.E_CWT: Default -> 1 outlier was removed (7.59 ns)

Hate.F_CWT_NeverHashed: Default -> 1 outlier was detected (7.14 ns)

Hate.B_CWTHell: Default -> 1 outlier was removed (13.20 ns)

Hate.F_CWTHell_NeverHashed: Default -> 1 outlier was removed (7.64 ns)

Hate.B_List: Default -> 1 outlier was removed (7.07 ns)

Hate.E_ListHell: Default -> 1 outlier was removed, 2 outliers were detected (68.97 ns, 69.74 ns)

// * Legends *

Mean : Arithmetic mean of all measurements

Error : Half of 99.9% confidence interval

StdDev : Standard deviation of all measurements

1 ns : 1 Nanosecond (0.000000001 sec)

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

Run time: 00:07:07 (427.68 sec), executed benchmarks: 17

Global total time: 00:07:13 (433.88 sec), executed benchmarks: 17

// * Artifacts cleanup *

Artifacts cleanup is finished

Clone this wiki locally