YieldBenchmarks
Benchmakrs of different enumeration methods in .NET 6.
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19042.1348 (20H2/October2020Update) AMD Ryzen 9 5900X, 1 CPU, 24 logical and 12 physical cores .NET SDK=6.0.100 [Host] : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT Job-GFBZAZ : .NET 6.0.0 (6.0.21.52210), X64 RyuJIT
Runtime=.NET 6.0 RunStrategy=Throughput
Method | Count | Mean | Error | StdDev | Median | Gen 0 | Gen 1 | Gen 2 | Allocated |
---|---|---|---|---|---|---|---|---|---|
Yield | 100 | 361.42 ns | 3.580 ns | 3.174 ns | 361.49 ns | 0.0024 | - | - | 40 B |
Array | 100 | 92.44 ns | 1.809 ns | 3.486 ns | 91.25 ns | 0.0253 | - | - | 424 B |
SpanArray | 100 | 89.23 ns | 1.100 ns | 1.029 ns | 89.27 ns | 0.0253 | - | - | 424 B |
ArrayAsEnumerable | 100 | 377.97 ns | 3.549 ns | 3.146 ns | 378.54 ns | 0.0272 | - | - | 456 B |
ArrayFor | 100 | 86.55 ns | 1.724 ns | 1.612 ns | 86.23 ns | 0.0253 | - | - | 424 B |
SpanArrayFor | 100 | 92.28 ns | 1.841 ns | 2.699 ns | 92.51 ns | 0.0253 | - | - | 424 B |
ListPreAllocated | 100 | 232.67 ns | 4.668 ns | 8.297 ns | 229.74 ns | 0.0272 | - | - | 456 B |
ListPreAllocatedFor | 100 | 181.78 ns | 3.664 ns | 8.989 ns | 181.46 ns | 0.0272 | - | - | 456 B |
ListAsEnumerablePreAllocated | 100 | 622.14 ns | 8.741 ns | 8.177 ns | 624.76 ns | 0.0296 | - | - | 496 B |
List | 100 | 345.22 ns | 6.792 ns | 8.085 ns | 345.82 ns | 0.0706 | - | - | 1,184 B |
ListFor | 100 | 305.58 ns | 6.113 ns | 15.449 ns | 301.14 ns | 0.0706 | - | - | 1,184 B |
ListAsEnumerable | 100 | 727.09 ns | 7.563 ns | 7.074 ns | 725.14 ns | 0.0725 | - | - | 1,224 B |
EnumerableWithStructEnumerator | 100 | 470.13 ns | 9.267 ns | 10.672 ns | 466.32 ns | 0.0072 | - | - | 120 B |
EnumerableWithClassEnumerator | 100 | 321.00 ns | 6.426 ns | 6.311 ns | 321.32 ns | 0.0072 | - | - | 120 B |
StructEnumerator | 100 | 29.07 ns | 0.597 ns | 0.613 ns | 29.03 ns | - | - | - | - |
ClassEnumerator | 100 | 49.62 ns | 1.017 ns | 1.522 ns | 48.98 ns | 0.0014 | - | - | 24 B |
Yield | 1000 | 3,573.58 ns | 70.751 ns | 78.640 ns | 3,553.82 ns | - | - | - | 40 B |
Array | 1000 | 829.08 ns | 16.495 ns | 28.889 ns | 827.97 ns | 0.2403 | - | - | 4,024 B |
SpanArray | 1000 | 786.79 ns | 13.776 ns | 16.918 ns | 790.71 ns | 0.2403 | - | - | 4,024 B |
ArrayAsEnumerable | 1000 | 3,693.60 ns | 36.257 ns | 33.915 ns | 3,691.78 ns | 0.2403 | - | - | 4,056 B |
ArrayFor | 1000 | 760.37 ns | 11.362 ns | 17.351 ns | 754.79 ns | 0.2403 | - | - | 4,024 B |
SpanArrayFor | 1000 | 777.42 ns | 14.861 ns | 17.114 ns | 777.95 ns | 0.2403 | - | - | 4,024 B |
ListPreAllocated | 1000 | 2,050.45 ns | 10.798 ns | 9.572 ns | 2,049.04 ns | 0.2422 | 0.0019 | - | 4,056 B |
ListPreAllocatedFor | 1000 | 1,557.72 ns | 18.756 ns | 17.545 ns | 1,550.38 ns | 0.2422 | 0.0019 | - | 4,056 B |
ListAsEnumerablePreAllocated | 1000 | 5,877.41 ns | 89.891 ns | 79.686 ns | 5,881.39 ns | 0.2441 | - | - | 4,096 B |
List | 1000 | 2,442.50 ns | 33.464 ns | 27.944 ns | 2,446.82 ns | 0.4997 | 0.0076 | - | 8,424 B |
ListFor | 1000 | 2,010.49 ns | 39.416 ns | 43.811 ns | 1,999.74 ns | 0.5016 | 0.0095 | - | 8,424 B |
ListAsEnumerable | 1000 | 6,004.08 ns | 63.840 ns | 56.592 ns | 6,013.74 ns | 0.5035 | 0.0076 | - | 8,464 B |
EnumerableWithStructEnumerator | 1000 | 4,087.49 ns | 77.101 ns | 75.723 ns | 4,113.07 ns | - | - | - | 120 B |
EnumerableWithClassEnumerator | 1000 | 3,009.39 ns | 25.946 ns | 24.270 ns | 3,015.38 ns | 0.0038 | - | - | 120 B |
StructEnumerator | 1000 | 230.72 ns | 0.665 ns | 0.520 ns | 230.69 ns | - | - | - | - |
ClassEnumerator | 1000 | 301.13 ns | 4.174 ns | 3.904 ns | 301.03 ns | 0.0014 | - | - | 24 B |
Yield | 10000 | 34,799.27 ns | 655.965 ns | 701.875 ns | 34,825.49 ns | - | - | - | 40 B |
Array | 10000 | 6,968.61 ns | 134.281 ns | 125.606 ns | 6,917.78 ns | 2.3804 | - | - | 40,024 B |
SpanArray | 10000 | 6,919.56 ns | 126.141 ns | 117.992 ns | 6,866.25 ns | 2.3804 | - | - | 40,024 B |
ArrayAsEnumerable | 10000 | 35,334.05 ns | 638.912 ns | 566.379 ns | 35,428.61 ns | 2.3804 | - | - | 40,056 B |
ArrayFor | 10000 | 6,993.88 ns | 136.957 ns | 152.227 ns | 7,005.48 ns | 2.3804 | - | - | 40,024 B |
SpanArrayFor | 10000 | 6,987.85 ns | 105.773 ns | 93.765 ns | 6,969.48 ns | 2.3804 | - | - | 40,024 B |
ListPreAllocated | 10000 | 19,162.08 ns | 172.071 ns | 160.956 ns | 19,191.02 ns | 2.3804 | 0.2747 | - | 40,056 B |
ListPreAllocatedFor | 10000 | 14,484.04 ns | 90.532 ns | 84.684 ns | 14,496.20 ns | 2.3804 | 0.2899 | - | 40,056 B |
ListAsEnumerablePreAllocated | 10000 | 54,068.01 ns | 883.669 ns | 737.903 ns | 54,336.54 ns | 2.3804 | 0.2441 | - | 40,096 B |
List | 10000 | 25,751.59 ns | 439.144 ns | 389.290 ns | 25,673.67 ns | 7.8125 | 1.5564 | - | 131,400 B |
ListFor | 10000 | 21,271.87 ns | 411.223 ns | 562.887 ns | 21,305.89 ns | 7.8125 | 1.5564 | - | 131,400 B |
ListAsEnumerable | 10000 | 59,762.03 ns | 560.015 ns | 523.838 ns | 59,660.14 ns | 7.8125 | 1.5259 | - | 131,440 B |
EnumerableWithStructEnumerator | 10000 | 41,035.79 ns | 509.594 ns | 451.742 ns | 41,156.28 ns | - | - | - | 120 B |
EnumerableWithClassEnumerator | 10000 | 29,664.49 ns | 303.049 ns | 283.472 ns | 29,738.06 ns | - | - | - | 120 B |
StructEnumerator | 10000 | 2,252.60 ns | 41.783 ns | 37.039 ns | 2,257.00 ns | - | - | - | - |
ClassEnumerator | 10000 | 2,854.80 ns | 8.105 ns | 7.581 ns | 2,852.37 ns | - | - | - | 24 B |
Yield | 100000 | 344,209.19 ns | 3,857.413 ns | 3,419.496 ns | 344,522.12 ns | - | - | - | 40 B |
Array | 100000 | 149,007.39 ns | 2,902.816 ns | 2,850.954 ns | 149,197.58 ns | 124.7559 | 124.7559 | 124.7559 | 400,067 B |
SpanArray | 100000 | 165,875.57 ns | 2,831.655 ns | 2,907.901 ns | 165,356.08 ns | 124.7559 | 124.7559 | 124.7559 | 400,067 B |
ArrayAsEnumerable | 100000 | 333,082.45 ns | 5,296.178 ns | 4,954.049 ns | 332,112.74 ns | 124.5117 | 124.5117 | 124.5117 | 400,098 B |
ArrayFor | 100000 | 68,332.48 ns | 1,329.858 ns | 1,681.844 ns | 68,950.29 ns | 124.7559 | 124.7559 | 124.7559 | 400,067 B |
SpanArrayFor | 100000 | 108,060.12 ns | 1,925.023 ns | 1,976.857 ns | 108,488.26 ns | 124.7559 | 124.7559 | 124.7559 | 400,066 B |
ListPreAllocated | 100000 | 266,118.64 ns | 5,173.583 ns | 4,839.373 ns | 267,802.78 ns | 124.5117 | 124.5117 | 124.5117 | 400,098 B |
ListPreAllocatedFor | 100000 | 171,220.91 ns | 2,386.368 ns | 2,115.453 ns | 171,328.39 ns | 124.5117 | 124.5117 | 124.5117 | 400,098 B |
ListAsEnumerablePreAllocated | 100000 | 576,418.53 ns | 7,482.536 ns | 6,633.073 ns | 577,166.46 ns | 124.0234 | 124.0234 | 124.0234 | 400,138 B |
List | 100000 | 377,805.62 ns | 3,571.947 ns | 3,166.438 ns | 377,843.63 ns | 285.6445 | 285.6445 | 285.6445 | 1,049,072 B |
ListFor | 100000 | 254,958.94 ns | 3,977.419 ns | 3,720.480 ns | 255,925.73 ns | 285.6445 | 285.6445 | 285.6445 | 1,049,072 B |
ListAsEnumerable | 100000 | 767,712.23 ns | 4,386.375 ns | 4,103.017 ns | 767,677.15 ns | 285.1563 | 285.1563 | 285.1563 | 1,049,112 B |
EnumerableWithStructEnumerator | 100000 | 410,042.90 ns | 4,283.833 ns | 4,007.100 ns | 410,599.76 ns | - | - | - | 120 B |
EnumerableWithClassEnumerator | 100000 | 267,723.79 ns | 5,174.829 ns | 7,254.388 ns | 270,364.55 ns | - | - | - | 120 B |
StructEnumerator | 100000 | 22,672.77 ns | 124.271 ns | 110.163 ns | 22,666.68 ns | - | - | - | - |
ClassEnumerator | 100000 | 28,518.48 ns | 93.478 ns | 82.866 ns | 28,508.09 ns | - | - | - | 24 B |
Yield | 1000000 | 3,454,202.34 ns | 13,727.279 ns | 12,840.505 ns | 3,451,197.27 ns | - | - | - | 42 B |
Array | 1000000 | 787,463.36 ns | 7,964.110 ns | 7,449.633 ns | 788,737.50 ns | 998.0469 | 998.0469 | 998.0469 | 4,000,365 B |
SpanArray | 1000000 | 797,894.99 ns | 11,867.606 ns | 11,100.966 ns | 797,012.40 ns | 998.0469 | 998.0469 | 998.0469 | 4,000,365 B |
ArrayAsEnumerable | 1000000 | 3,317,991.15 ns | 58,579.152 ns | 54,794.975 ns | 3,341,410.16 ns | 992.1875 | 992.1875 | 992.1875 | 4,000,395 B |
ArrayFor | 1000000 | 791,535.47 ns | 10,392.955 ns | 9,721.576 ns | 790,121.09 ns | 998.0469 | 998.0469 | 998.0469 | 4,000,365 B |
SpanArrayFor | 1000000 | 806,574.45 ns | 15,084.206 ns | 14,109.775 ns | 804,832.62 ns | 998.0469 | 998.0469 | 998.0469 | 4,000,361 B |
ListPreAllocated | 1000000 | 1,949,278.80 ns | 19,825.294 ns | 18,544.592 ns | 1,950,201.56 ns | 996.0938 | 996.0938 | 996.0938 | 4,000,392 B |
ListPreAllocatedFor | 1000000 | 1,483,358.41 ns | 26,740.626 ns | 25,013.198 ns | 1,485,576.17 ns | 996.0938 | 996.0938 | 996.0938 | 4,000,392 B |
ListAsEnumerablePreAllocated | 1000000 | 5,209,356.14 ns | 59,824.790 ns | 53,033.119 ns | 5,214,291.80 ns | 992.1875 | 992.1875 | 992.1875 | 4,000,432 B |
List | 1000000 | 8,770,945.22 ns | 462,934.495 ns | 1,364,972.802 ns | 9,102,647.66 ns | 1835.9375 | 1835.9375 | 1835.9375 | 8,389,636 B |
ListFor | 1000000 | 8,667,393.43 ns | 612,015.132 ns | 1,804,540.424 ns | 9,268,035.55 ns | 1851.5625 | 1851.5625 | 1851.5625 | 8,389,641 B |
ListAsEnumerable | 1000000 | 11,848,900.89 ns | 559,681.728 ns | 1,650,234.203 ns | 12,455,236.72 ns | 1828.1250 | 1828.1250 | 1828.1250 | 8,389,680 B |
EnumerableWithStructEnumerator | 1000000 | 3,912,166.35 ns | 9,122.631 ns | 7,617.810 ns | 3,910,342.97 ns | - | - | - | 122 B |
EnumerableWithClassEnumerator | 1000000 | 2,537,318.11 ns | 37,160.711 ns | 32,942.002 ns | 2,541,284.96 ns | - | - | - | 122 B |
StructEnumerator | 1000000 | 229,377.31 ns | 3,443.707 ns | 3,052.757 ns | 228,607.42 ns | - | - | - | - |
ClassEnumerator | 1000000 | 283,205.60 ns | 4,624.514 ns | 4,325.774 ns | 284,619.78 ns | - | - | - | 24 B |
Yield | 10000000 | 34,803,397.14 ns | 595,110.688 ns | 556,666.906 ns | 34,738,850.00 ns | - | - | - | 67 B |
Array | 10000000 | 11,357,159.56 ns | 207,455.242 ns | 428,431.048 ns | 11,216,584.38 ns | 500.0000 | 500.0000 | 500.0000 | 40,000,192 B |
SpanArray | 10000000 | 11,038,724.06 ns | 143,609.933 ns | 134,332.821 ns | 11,005,789.06 ns | 500.0000 | 500.0000 | 500.0000 | 40,000,192 B |
ArrayAsEnumerable | 10000000 | 36,287,366.07 ns | 335,943.083 ns | 297,804.792 ns | 36,322,279.17 ns | 500.0000 | 500.0000 | 500.0000 | 40,000,244 B |
ArrayFor | 10000000 | 11,190,465.00 ns | 223,106.593 ns | 208,694.046 ns | 11,162,209.38 ns | 500.0000 | 500.0000 | 500.0000 | 40,000,192 B |
SpanArrayFor | 10000000 | 11,001,856.25 ns | 144,205.674 ns | 127,834.574 ns | 11,003,495.31 ns | 500.0000 | 500.0000 | 500.0000 | 40,000,262 B |
ListPreAllocated | 10000000 | 22,746,962.95 ns | 234,397.487 ns | 207,787.267 ns | 22,763,868.75 ns | 500.0000 | 500.0000 | 500.0000 | 40,000,236 B |
ListPreAllocatedFor | 10000000 | 18,061,488.17 ns | 235,328.083 ns | 208,612.216 ns | 18,022,773.44 ns | 500.0000 | 500.0000 | 500.0000 | 40,000,224 B |
ListAsEnumerablePreAllocated | 10000000 | 56,266,840.74 ns | 1,060,286.882 ns | 1,486,374.127 ns | 56,477,850.00 ns | 500.0000 | 500.0000 | 500.0000 | 40,000,300 B |
List | 10000000 | 64,145,683.84 ns | 1,168,883.486 ns | 1,435,493.893 ns | 63,917,733.33 ns | 3000.0000 | 3000.0000 | 3000.0000 | 134,219,253 B |
ListFor | 10000000 | 61,536,427.03 ns | 1,213,656.777 ns | 2,060,881.315 ns | 61,733,311.11 ns | 3222.2222 | 3222.2222 | 3222.2222 | 134,219,323 B |
ListAsEnumerable | 10000000 | 95,748,054.44 ns | 1,855,676.078 ns | 1,735,800.555 ns | 95,772,433.33 ns | 3333.3333 | 3333.3333 | 3333.3333 | 134,221,325 B |
EnumerableWithStructEnumerator | 10000000 | 41,533,448.90 ns | 471,428.118 ns | 417,908.747 ns | 41,400,892.31 ns | - | - | - | 150 B |
EnumerableWithClassEnumerator | 10000000 | 25,452,779.24 ns | 114,554.909 ns | 101,549.943 ns | 25,430,178.12 ns | - | - | - | 132 B |
StructEnumerator | 10000000 | 2,287,743.19 ns | 22,696.487 ns | 21,230.308 ns | 2,277,097.46 ns | - | - | - | 2 B |
ClassEnumerator | 10000000 | 2,850,516.41 ns | 23,453.804 ns | 19,584.988 ns | 2,842,571.48 ns | - | - | - | 26 B |