Skip to content

T-Gro/Fsharp.ParallelGroupBy.Benchmarks

Repository files navigation

Fsharp.ParallelGroupBy.Benchmarks

Benchmarks for implementation of Array.Parallel.GroupBy

There are two main baselines to compare with:

  • Array.groupBy ; especially for smaller sizes (<100K) OR very cheap projection. Has the lowest allocation profile
  • PLINQ's GroupBy, especially for bigger sizes (>100K) OR expensive projections

The benchmark uses three main profiles which differ in:

  • The number of final groups/buckets (controlled by modulo operation)
  • Time complexity of the projection. More complex gives advantage to parallel scenarios, since the projection function can be parallelized.
  • Especially for the combination of many final buckets AND having a cheap projection function the inner overhead of .groupBy implementation stands out.

Different tasks

  • Ref vs Struct
  • Cheap vs expensive projection
  • Few vs many resulting buckets
type ReferenceRecordExpensiveProjection = {Id : int; Value : float}
    with interface IBenchMarkElement<ReferenceRecordExpensiveProjection> 
            with 
                static member Create(id,value) = {Id = id; Value = value}
                static member Projection() = fun x -> (x.Id.ToString().GetHashCode() * (x.Value |> sin |> string |> hash)) % 20

type ReferenceRecordNormal = {Id : int; Value : float}
    with interface IBenchMarkElement<ReferenceRecordNormal> 
            with 
                static member Create(id,value) = {Id = id; Value = value}
                static member Projection() = fun x -> (x.Id  ) % 128

type ReferenceRecordManyBuckets = {Id : int; Value : float}
    with interface IBenchMarkElement<ReferenceRecordManyBuckets> 
            with 
                static member Create(id,value) = {Id = id; Value = value}
                static member Projection() = fun x -> (x.Value.GetHashCode() * x.Id.GetHashCode() ) % 10_000

[<Struct>]
type StructRecord = {Id : int; Value : float}
    with interface IBenchMarkElement<StructRecord> 
            with 
                static member Create(id,value) = {Id = id; Value = value}
                static member Projection() = fun x -> x.Id % 20

[<Struct>]
type StructRecordManyBuckets = {Id : int; Value : float}
    with interface IBenchMarkElement<StructRecordManyBuckets> 
            with 
                static member Create(id,value) = {Id = id; Value = value}
                static member Projection() = fun x -> x.Id % 10_000

Results

BenchmarkDotNet=v0.13.5, OS=Windows 11 (10.0.22621.1265/22H2/2022Update/SunValley2) 11th Gen Intel Core i9-11950H 2.60GHz, 1 CPU, 16 logical and 8 physical cores .NET SDK=7.0.200 [Host] : .NET 7.0.3 (7.0.323.6910), X64 RyuJIT AVX2 DEBUG DefaultJob : .NET 7.0.3 (7.0.323.6910), X64 RyuJIT AVX2

Method Type NumberOfItems Mean Error StdDev Median Ratio RatioSD Completed Work Items Lock Contentions Gen0 Gen1 Gen2 Allocated Alloc Ratio
SortByForReference StructRecord 4000 157.34 us 3.130 us 4.589 us 158.66 us 0.64 0.02 - - 7.5684 - - 93.8 KB 0.09
ArrayGroupBy StructRecord 4000 49.91 us 0.502 us 0.445 us 49.93 us 0.20 0.00 - - 18.6157 5.9814 - 228.49 KB 0.22
PLINQDefault StructRecord 4000 243.54 us 4.831 us 5.169 us 241.53 us 1.00 0.00 15.0000 11.5552 89.1113 71.5332 - 1050.09 KB 1.00
EachChunkSeparatelyThenMerge StructRecord 4000 50.78 us 1.011 us 1.661 us 50.28 us 0.21 0.01 17.4300 0.0014 36.9873 18.3716 - 373.26 KB 0.36
EachChunkSeparatelyThenCombineArrayBuilders StructRecord 4000 78.19 us 1.523 us 2.233 us 78.42 us 0.32 0.01 4.1427 - 41.6260 19.7754 - 443.71 KB 0.42
GroupByInPlaceViaSortAndParallelSegmentation StructRecord 4000 232.69 us 4.625 us 6.922 us 231.60 us 0.97 0.04 12.9634 0.0007 33.2031 2.1973 - 408.75 KB 0.39
SortThenCreateGroups StructRecord 4000 60.08 us 1.200 us 2.757 us 60.60 us 0.25 0.01 - - 7.0801 1.3428 - 87.22 KB 0.08
GroupByInPlaceViaSort StructRecord 4000 201.53 us 1.099 us 0.974 us 201.29 us 0.83 0.02 11.9299 0.0012 33.4473 2.1973 - 410.21 KB 0.39
FullyOnParallelFor StructRecord 4000 99.33 us 0.484 us 0.429 us 99.49 us 0.41 0.01 16.9712 0.4312 26.0010 25.8789 4.6387 301.7 KB 0.29
CountByThenAssign StructRecord 4000 93.26 us 0.593 us 0.555 us 93.27 us 0.38 0.01 39.0732 0.0035 28.0762 2.1973 - 331.57 KB 0.32
ConcurrentMultiDictionairy StructRecord 4000 238.74 us 4.677 us 7.142 us 238.31 us 0.99 0.04 21.9253 3.8013 43.4570 43.2129 10.0098 511.05 KB 0.49
SortByForReference StructRecord 50000 3,174.35 us 59.483 us 125.470 us 3,122.32 us 3.77 0.11 - - 281.2500 281.2500 281.2500 1172.01 KB 0.20
ArrayGroupBy StructRecord 50000 614.27 us 12.269 us 26.932 us 628.04 us 0.70 0.04 - - 272.4609 181.6406 - 3349.12 KB 0.58
PLINQDefault StructRecord 50000 875.69 us 15.741 us 13.954 us 875.29 us 1.00 0.00 15.0000 11.1084 543.9453 509.7656 - 5732.01 KB 1.00
EachChunkSeparatelyThenMerge StructRecord 50000 460.99 us 2.040 us 1.909 us 460.91 us 0.53 0.01 20.9961 0.0098 441.8945 419.9219 - 4074.11 KB 0.71
EachChunkSeparatelyThenCombineArrayBuilders StructRecord 50000 523.48 us 4.572 us 4.053 us 522.71 us 0.60 0.01 11.4053 0.0049 448.2422 436.5234 - 4462.82 KB 0.78
GroupByInPlaceViaSortAndParallelSegmentation StructRecord 50000 2,547.58 us 48.945 us 66.996 us 2,536.83 us 2.90 0.08 16.8125 0.0039 437.5000 58.5938 58.5938 4903.19 KB 0.86
SortThenCreateGroups StructRecord 50000 1,400.43 us 7.804 us 6.918 us 1,400.28 us 1.60 0.03 - - 250.0000 250.0000 250.0000 985.73 KB 0.17
GroupByInPlaceViaSort StructRecord 50000 2,496.83 us 48.360 us 62.882 us 2,499.68 us 2.84 0.09 16.2500 - 437.5000 58.5938 58.5938 4904.5 KB 0.86
FullyOnParallelFor StructRecord 50000 854.59 us 17.002 us 47.955 us 852.22 us 0.98 0.06 26.8164 0.5313 355.4688 296.8750 140.6250 3258.99 KB 0.57
CountByThenAssign StructRecord 50000 867.73 us 3.743 us 2.922 us 868.52 us 0.99 0.02 43.5020 0.0342 331.0547 68.3594 - 3926.11 KB 0.68
ConcurrentMultiDictionairy StructRecord 50000 1,894.83 us 37.555 us 102.806 us 1,878.45 us 2.28 0.13 29.2578 4.5352 671.8750 287.1094 103.5156 6129.31 KB 1.07
SortByForReference StructRecord 100000 6,526.54 us 36.659 us 32.497 us 6,531.85 us 3.87 0.05 - - 351.5625 351.5625 351.5625 2343.91 KB 0.24
ArrayGroupBy StructRecord 100000 1,491.09 us 29.821 us 48.997 us 1,482.91 us 0.90 0.03 - - 906.2500 882.8125 570.3125 6691 KB 0.68
PLINQDefault StructRecord 100000 1,688.95 us 23.949 us 22.402 us 1,692.59 us 1.00 0.00 15.0000 11.9238 925.7813 898.4375 - 9850.66 KB 1.00
EachChunkSeparatelyThenMerge StructRecord 100000 7,765.79 us 34.612 us 30.683 us 7,766.55 us 4.60 0.07 11.6797 - 867.1875 859.3750 492.1875 6462.66 KB 0.66
EachChunkSeparatelyThenCombineArrayBuilders StructRecord 100000 7,792.92 us 111.135 us 103.956 us 7,783.29 us 4.61 0.08 6.2734 - 937.5000 929.6875 500.0000 7579.44 KB 0.77
GroupByInPlaceViaSortAndParallelSegmentation StructRecord 100000 5,906.01 us 114.729 us 160.834 us 5,922.58 us 3.52 0.12 18.2109 0.0156 875.0000 109.3750 109.3750 9786.35 KB 0.99
SortThenCreateGroups StructRecord 100000 2,941.68 us 39.248 us 34.793 us 2,946.18 us 1.74 0.02 - - 496.0938 496.0938 496.0938 1962.37 KB 0.20
GroupByInPlaceViaSort StructRecord 100000 5,401.30 us 60.446 us 53.584 us 5,409.64 us 3.20 0.05 16.9531 0.0078 875.0000 109.3750 109.3750 9787.61 KB 0.99
FullyOnParallelFor StructRecord 100000 2,457.95 us 48.062 us 60.783 us 2,453.39 us 1.46 0.04 27.2422 0.5391 757.8125 472.6563 171.8750 6301.58 KB 0.64
CountByThenAssign StructRecord 100000 1,829.96 us 22.224 us 19.701 us 1,824.30 us 1.08 0.02 42.9219 0.0566 650.3906 134.7656 - 7832.15 KB 0.80
ConcurrentMultiDictionairy StructRecord 100000 4,520.13 us 117.857 us 347.505 us 4,485.39 us 2.59 0.12 35.8516 9.0938 1390.6250 593.7500 203.1250 12294.87 KB 1.25
SortByForReference StructRecord 500000 37,637.68 us 596.748 us 558.198 us 37,700.91 us 2.29 0.12 - - 428.5714 428.5714 428.5714 11718.96 KB 0.27
ArrayGroupBy StructRecord 500000 10,356.70 us 203.026 us 350.209 us 10,327.10 us 0.65 0.05 - - 1109.3750 1078.1250 906.2500 28302.64 KB 0.66
PLINQDefault StructRecord 500000 16,173.89 us 338.247 us 997.330 us 16,213.97 us 1.00 0.00 15.0000 9.8438 2875.0000 2656.2500 968.7500 43070.85 KB 1.00
EachChunkSeparatelyThenMerge StructRecord 500000 16,518.88 us 328.457 us 449.596 us 16,640.92 us 1.03 0.07 24.2500 0.0313 3562.5000 3531.2500 1000.0000 51212.87 KB 1.19
EachChunkSeparatelyThenCombineArrayBuilders StructRecord 500000 16,336.73 us 320.264 us 507.973 us 16,246.87 us 1.02 0.07 13.7500 - 3625.0000 3250.0000 1000.0000 52208.41 KB 1.21
GroupByInPlaceViaSortAndParallelSegmentation StructRecord 500000 21,331.05 us 210.012 us 196.445 us 21,212.17 us 1.30 0.07 25.8750 - 3937.5000 125.0000 125.0000 48848.84 KB 1.13
SortThenCreateGroups StructRecord 500000 17,180.11 us 324.902 us 303.914 us 17,116.36 us 1.05 0.05 - - 437.5000 437.5000 437.5000 9774.87 KB 0.23
GroupByInPlaceViaSort StructRecord 500000 21,691.25 us 433.745 us 464.102 us 21,630.39 us 1.33 0.08 22.4688 - 3937.5000 125.0000 125.0000 48849.87 KB 1.13
FullyOnParallelFor StructRecord 500000 11,887.66 us 236.797 us 686.992 us 11,963.15 us 0.74 0.06 32.1563 0.2969 2593.7500 2046.8750 656.2500 30962.9 KB 0.72
CountByThenAssign StructRecord 500000 11,931.59 us 192.701 us 180.253 us 11,918.91 us 0.73 0.04 47.5156 0.0156 2828.1250 281.2500 265.6250 39100.24 KB 0.91
ConcurrentMultiDictionairy StructRecord 500000 17,493.32 us 345.831 us 815.164 us 17,530.02 us 1.09 0.09 35.3438 1.2188 5625.0000 2875.0000 843.7500 61952.84 KB 1.44
SortByForReference StructRecord 2500000 217,358.97 us 4,328.276 us 4,631.207 us 217,611.15 us 5.17 0.33 - - 333.3333 333.3333 333.3333 58594.07 KB 0.32
ArrayGroupBy StructRecord 2500000 42,360.29 us 741.462 us 693.564 us 42,506.54 us 1.00 0.06 - - 1000.0000 923.0769 846.1538 120993.02 KB 0.67
PLINQDefault StructRecord 2500000 42,835.68 us 850.729 us 2,005.268 us 43,037.62 us 1.00 0.00 15.0000 8.9167 3916.6667 3833.3333 1166.6667 181879.57 KB 1.00
EachChunkSeparatelyThenMerge StructRecord 2500000 35,884.55 us 716.966 us 1,950.558 us 35,530.14 us 0.84 0.07 32.0667 0.0667 3400.0000 3333.3333 800.0000 216953.08 KB 1.19
EachChunkSeparatelyThenCombineArrayBuilders StructRecord 2500000 45,426.26 us 904.293 us 2,166.627 us 45,419.99 us 1.06 0.07 16.9167 - 4583.3333 4500.0000 1166.6667 228075.05 KB 1.25
GroupByInPlaceViaSortAndParallelSegmentation StructRecord 2500000 103,691.41 us 1,217.204 us 1,079.020 us 103,827.09 us 2.46 0.14 30.2000 - 19000.0000 - - 244161.75 KB 1.34
SortThenCreateGroups StructRecord 2500000 91,213.97 us 1,823.729 us 2,027.070 us 91,652.52 us 2.17 0.12 - - 333.3333 333.3333 333.3333 48837.41 KB 0.27
GroupByInPlaceViaSort StructRecord 2500000 100,719.91 us 1,843.694 us 1,893.338 us 100,587.23 us 2.40 0.14 23.0000 - 19000.0000 - - 244162.33 KB 1.34
FullyOnParallelFor StructRecord 2500000 25,495.58 us 503.003 us 1,093.487 us 25,357.96 us 0.60 0.04 33.2500 0.0313 4687.5000 4062.5000 1343.7500 157515.61 KB 0.87
CountByThenAssign StructRecord 2500000 56,053.18 us 1,090.336 us 1,492.465 us 55,971.84 us 1.33 0.07 51.3000 - 13300.0000 500.0000 500.0000 195359.31 KB 1.07
ConcurrentMultiDictionairy StructRecord 2500000 52,668.53 us 1,041.496 us 1,878.031 us 52,364.62 us 1.24 0.07 33.9000 0.1000 19400.0000 7300.0000 2000.0000 305667.22 KB 1.68
SortByForReference StructRecord 25000000 2,351,806.25 us 35,022.826 us 32,760.374 us 2,351,706.60 us 9.06 0.26 - - - - - 585938.04 KB 0.22
ArrayGroupBy StructRecord 25000000 450,170.88 us 8,940.527 us 9,937.372 us 453,347.10 us 1.73 0.05 - - 1000.0000 1000.0000 1000.0000 1701357.91 KB 0.63
PLINQDefault StructRecord 25000000 260,563.92 us 5,183.680 us 6,740.248 us 261,579.40 us 1.00 0.00 15.0000 12.0000 3000.0000 2000.0000 1000.0000 2683902.65 KB 1.00
EachChunkSeparatelyThenMerge StructRecord 25000000 132,646.36 us 2,627.391 us 6,591.610 us 131,395.10 us 0.50 0.03 33.7500 - 3250.0000 3000.0000 750.0000 1560284.26 KB 0.58
EachChunkSeparatelyThenCombineArrayBuilders StructRecord 25000000 175,806.91 us 3,501.767 us 7,686.464 us 174,434.13 us 0.67 0.03 17.0000 - 3333.3333 3000.0000 1000.0000 1824184.33 KB 0.68
GroupByInPlaceViaSortAndParallelSegmentation StructRecord 25000000 1,042,473.76 us 20,116.113 us 23,165.746 us 1,040,516.30 us 4.00 0.14 39.0000 - 191000.0000 - - 2441429.22 KB 0.91
SortThenCreateGroups StructRecord 25000000 993,415.19 us 17,578.828 us 13,724.393 us 994,472.35 us 3.81 0.12 - - - - - 488290.84 KB 0.18
GroupByInPlaceViaSort StructRecord 25000000 1,024,796.18 us 19,337.125 us 25,814.506 us 1,023,253.00 us 3.94 0.13 24.0000 - 191000.0000 - - 2441428.21 KB 0.91
FullyOnParallelFor StructRecord 25000000 161,913.25 us 3,226.153 us 4,626.852 us 162,039.39 us 0.62 0.03 35.2500 - 4500.0000 3750.0000 1500.0000 1624547.79 KB 0.61
CountByThenAssign StructRecord 25000000 467,014.02 us 8,266.653 us 7,732.632 us 467,222.20 us 1.80 0.07 71.0000 - 128000.0000 - - 1953147.88 KB 0.73
ConcurrentMultiDictionairy StructRecord 25000000 298,155.50 us 5,123.819 us 4,792.823 us 296,976.25 us 1.15 0.04 36.0000 - 135000.0000 10000.0000 2500.0000 3214718.71 KB 1.20
SortByForReference ReferenceRecord 4000 204.26 us 4.023 us 4.633 us 203.94 us 0.83 0.02 - - 4.8828 0.2441 - 62.55 KB 0.08
ArrayGroupBy ReferenceRecord 4000 51.78 us 1.034 us 1.699 us 52.23 us 0.21 0.01 - - 10.1929 1.8921 - 125.26 KB 0.16
PLINQDefault ReferenceRecord 4000 247.80 us 3.303 us 3.090 us 247.74 us 1.00 0.00 15.0000 11.4233 63.9648 41.0156 - 773.76 KB 1.00
EachChunkSeparatelyThenMerge ReferenceRecord 4000 109.82 us 2.196 us 5.218 us 107.46 us 0.44 0.02 11.9973 0.0029 48.9502 28.4424 - 554.64 KB 0.72
EachChunkSeparatelyThenCombineArrayBuilders ReferenceRecord 4000 217.00 us 4.247 us 5.954 us 214.73 us 0.88 0.03 5.5830 - 64.2090 35.8887 - 755.44 KB 0.98
GroupByInPlaceViaSortAndParallelSegmentation ReferenceRecord 4000 218.13 us 1.536 us 1.437 us 218.43 us 0.88 0.01 13.8711 0.0005 34.1797 2.1973 - 418.83 KB 0.54
SortThenCreateGroups ReferenceRecord 4000 127.26 us 2.498 us 3.503 us 128.75 us 0.51 0.01 - - 4.8828 0.4883 - 61.03 KB 0.08
GroupByInPlaceViaSort ReferenceRecord 4000 212.67 us 1.647 us 1.541 us 212.82 us 0.86 0.01 12.6609 0.0017 33.9355 2.1973 - 415.49 KB 0.54
FullyOnParallelFor ReferenceRecord 4000 241.76 us 2.695 us 2.520 us 241.30 us 0.98 0.02 11.2432 0.0088 25.3906 24.9023 3.9063 305.94 KB 0.40
CountByThenAssign ReferenceRecord 4000 101.80 us 0.608 us 0.539 us 101.60 us 0.41 0.01 37.0566 0.0433 27.0996 2.0752 - 329.94 KB 0.43
ConcurrentMultiDictionairy ReferenceRecord 4000 1,941.97 us 38.291 us 73.773 us 1,940.40 us 8.05 0.31 27.4648 14.3086 87.8906 85.9375 27.3438 1070.21 KB 1.38
SortByForReference ReferenceRecord 50000 4,264.17 us 83.506 us 99.408 us 4,255.76 us 5.04 0.16 - - 242.1875 242.1875 242.1875 781.38 KB 0.25
ArrayGroupBy ReferenceRecord 50000 606.51 us 11.923 us 19.921 us 605.46 us 0.73 0.03 - - 118.1641 60.5469 - 1456.63 KB 0.46
PLINQDefault ReferenceRecord 50000 845.74 us 13.877 us 12.302 us 842.95 us 1.00 0.00 15.0000 11.4229 302.7344 231.4453 - 3153.13 KB 1.00
EachChunkSeparatelyThenMerge ReferenceRecord 50000 563.23 us 11.258 us 8.789 us 563.36 us 0.67 0.01 18.3857 0.0127 321.2891 287.1094 - 3773.92 KB 1.20
EachChunkSeparatelyThenCombineArrayBuilders ReferenceRecord 50000 789.58 us 7.002 us 6.207 us 790.30 us 0.93 0.02 8.1240 - 341.7969 290.0391 - 4136.34 KB 1.31
GroupByInPlaceViaSortAndParallelSegmentation ReferenceRecord 50000 2,709.13 us 43.395 us 40.592 us 2,701.99 us 3.20 0.06 18.3359 0.0078 394.5313 62.5000 62.5000 4911.85 KB 1.56
SortThenCreateGroups ReferenceRecord 50000 2,448.40 us 48.833 us 61.759 us 2,464.13 us 2.90 0.08 - - 179.6875 179.6875 179.6875 600.15 KB 0.19
GroupByInPlaceViaSort ReferenceRecord 50000 2,596.90 us 16.191 us 15.145 us 2,600.54 us 3.07 0.05 16.9180 0.0078 394.5313 62.5000 62.5000 4908.44 KB 1.56
FullyOnParallelFor ReferenceRecord 50000 1,178.91 us 23.243 us 38.834 us 1,174.29 us 1.39 0.06 17.2578 2.1777 171.8750 167.9688 33.2031 1961.88 KB 0.62
CountByThenAssign ReferenceRecord 50000 834.37 us 5.530 us 4.902 us 832.71 us 0.99 0.02 45.1113 0.2070 299.8047 50.7813 - 3565.4 KB 1.13
ConcurrentMultiDictionairy ReferenceRecord 50000 8,698.99 us 172.120 us 169.045 us 8,673.17 us 10.29 0.30 33.0469 19.9375 421.8750 171.8750 46.8750 4588.27 KB 1.46
SortByForReference ReferenceRecord 100000 9,470.64 us 181.410 us 208.912 us 9,496.19 us 4.31 0.13 - - 484.3750 484.3750 484.3750 1562.71 KB 0.24
ArrayGroupBy ReferenceRecord 100000 1,270.70 us 25.314 us 49.374 us 1,279.81 us 0.58 0.03 - - 234.3750 169.9219 - 2874.26 KB 0.43
PLINQDefault ReferenceRecord 100000 2,203.17 us 41.530 us 58.219 us 2,207.53 us 1.00 0.00 15.0000 11.0117 734.3750 636.7188 - 6645.73 KB 1.00
EachChunkSeparatelyThenMerge ReferenceRecord 100000 7,818.32 us 59.613 us 55.762 us 7,840.36 us 3.55 0.10 12.7422 0.0078 773.4375 773.4375 500.0000 5767.98 KB 0.87
EachChunkSeparatelyThenCombineArrayBuilders ReferenceRecord 100000 7,828.13 us 59.294 us 55.464 us 7,849.83 us 3.55 0.09 7.0078 - 820.3125 820.3125 507.8125 6495.77 KB 0.98
GroupByInPlaceViaSortAndParallelSegmentation ReferenceRecord 100000 5,789.14 us 114.804 us 171.833 us 5,776.25 us 2.63 0.11 21.4844 0.0078 867.1875 109.3750 109.3750 9798.69 KB 1.47
SortThenCreateGroups ReferenceRecord 100000 5,050.16 us 53.140 us 49.707 us 5,043.84 us 2.29 0.07 - - 289.0625 289.0625 289.0625 1186.12 KB 0.18
GroupByInPlaceViaSort ReferenceRecord 100000 5,715.70 us 96.587 us 85.622 us 5,728.81 us 2.60 0.07 19.5625 0.0156 875.0000 117.1875 117.1875 9796.78 KB 1.47
FullyOnParallelFor ReferenceRecord 100000 2,427.00 us 48.527 us 91.146 us 2,423.34 us 1.11 0.06 18.2422 1.8203 371.0938 316.4063 62.5000 3566.9 KB 0.54
CountByThenAssign ReferenceRecord 100000 1,747.19 us 15.304 us 14.315 us 1,745.05 us 0.79 0.02 45.2188 0.1270 597.6563 89.8438 - 7080.92 KB 1.07
ConcurrentMultiDictionairy ReferenceRecord 100000 17,957.19 us 338.057 us 347.160 us 17,794.89 us 8.16 0.27 32.3438 14.2188 843.7500 375.0000 93.7500 9032.12 KB 1.36
SortByForReference ReferenceRecord 500000 51,071.36 us 959.013 us 984.836 us 50,980.00 us 1.46 0.06 - - 300.0000 300.0000 300.0000 7812.68 KB 0.28
ArrayGroupBy ReferenceRecord 500000 7,585.85 us 151.184 us 280.229 us 7,577.83 us 0.22 0.01 - - 984.3750 867.1875 - 12149.26 KB 0.43
PLINQDefault ReferenceRecord 500000 34,764.75 us 688.029 us 1,341.948 us 34,689.98 us 1.00 0.00 15.0000 8.6250 3687.5000 3625.0000 812.5000 28300.55 KB 1.00
EachChunkSeparatelyThenMerge ReferenceRecord 500000 18,770.70 us 568.575 us 1,676.457 us 19,016.67 us 0.54 0.05 20.9375 - 1437.5000 1375.0000 500.0000 25954.92 KB 0.92
EachChunkSeparatelyThenCombineArrayBuilders ReferenceRecord 500000 24,604.30 us 689.938 us 2,034.298 us 24,569.50 us 0.71 0.06 13.0625 - 1937.5000 1812.5000 843.7500 28724.02 KB 1.01
GroupByInPlaceViaSortAndParallelSegmentation ReferenceRecord 500000 24,173.86 us 405.893 us 359.814 us 24,155.61 us 0.69 0.03 25.2500 - 3937.5000 125.0000 125.0000 48859.07 KB 1.73
SortThenCreateGroups ReferenceRecord 500000 30,134.98 us 582.896 us 572.481 us 30,035.98 us 0.86 0.03 - - 312.5000 312.5000 312.5000 5873.64 KB 0.21
GroupByInPlaceViaSort ReferenceRecord 500000 24,149.03 us 433.996 us 622.425 us 24,189.89 us 0.69 0.03 22.0313 - 3937.5000 125.0000 125.0000 48855.62 KB 1.73
FullyOnParallelFor ReferenceRecord 500000 14,822.86 us 289.980 us 551.717 us 14,956.39 us 0.43 0.02 26.7500 1.7188 1843.7500 1125.0000 218.7500 15874.08 KB 0.56
CountByThenAssign ReferenceRecord 500000 8,208.37 us 63.109 us 52.699 us 8,213.22 us 0.24 0.01 57.7031 0.0313 2953.1250 390.6250 - 35206.88 KB 1.24
ConcurrentMultiDictionairy ReferenceRecord 500000 81,454.74 us 989.458 us 925.539 us 81,272.40 us 2.33 0.11 36.4286 10.0000 4142.8571 1714.2857 142.8571 46994.63 KB 1.66
SortByForReference ReferenceRecord 2500000 271,461.72 us 5,343.932 us 5,248.456 us 271,384.60 us 2.21 0.06 - - - - - 39062.79 KB 0.26
ArrayGroupBy ReferenceRecord 2500000 63,282.39 us 1,254.560 us 2,417.112 us 63,486.42 us 0.51 0.02 - - 1888.8889 1777.7778 555.5556 85126.87 KB 0.57
PLINQDefault ReferenceRecord 2500000 122,988.68 us 2,347.214 us 3,052.041 us 123,359.00 us 1.00 0.00 15.0000 6.5000 6500.0000 5500.0000 500.0000 150479.22 KB 1.00
EachChunkSeparatelyThenMerge ReferenceRecord 2500000 62,152.33 us 2,031.523 us 5,989.990 us 61,050.96 us 0.52 0.05 35.2000 - 3400.0000 3300.0000 400.0000 110613.75 KB 0.74
EachChunkSeparatelyThenCombineArrayBuilders ReferenceRecord 2500000 87,541.83 us 1,726.963 us 3,790.726 us 86,664.39 us 0.72 0.04 17.0000 - 4833.3333 4666.6667 833.3333 124249.04 KB 0.83
GroupByInPlaceViaSortAndParallelSegmentation ReferenceRecord 2500000 114,620.26 us 2,281.932 us 5,971.419 us 115,332.95 us 0.93 0.05 30.0000 - 19000.0000 - - 244171.89 KB 1.62
SortThenCreateGroups ReferenceRecord 2500000 179,258.72 us 3,505.852 us 5,138.833 us 179,141.83 us 1.46 0.06 - - 333.3333 333.3333 333.3333 29311.3 KB 0.19
GroupByInPlaceViaSort ReferenceRecord 2500000 118,517.69 us 2,317.810 us 3,094.210 us 118,988.53 us 0.96 0.04 22.0000 - 19000.0000 - - 244167.15 KB 1.62
FullyOnParallelFor ReferenceRecord 2500000 79,939.56 us 1,580.008 us 3,963.931 us 80,132.96 us 0.64 0.04 45.1429 0.1429 6428.5714 5571.4286 285.7143 81774.01 KB 0.54
CountByThenAssign ReferenceRecord 2500000 44,223.60 us 831.096 us 736.745 us 44,191.25 us 0.36 0.01 56.4167 0.0833 13000.0000 250.0000 250.0000 175842.09 KB 1.17
ConcurrentMultiDictionairy ReferenceRecord 2500000 371,662.08 us 3,782.205 us 3,158.312 us 372,758.60 us 3.01 0.06 34.0000 - 18000.0000 7000.0000 - 235291.02 KB 1.56
SortByForReference ReferenceRecord 25000000 3,078,500.79 us 32,580.386 us 28,881.663 us 3,079,307.80 us 2.99 0.07 - - - - - 390625.54 KB 0.31
ArrayGroupBy ReferenceRecord 25000000 912,032.69 us 15,826.505 us 14,804.122 us 918,280.90 us 0.88 0.03 - - 2000.0000 1000.0000 1000.0000 719670.33 KB 0.58
PLINQDefault ReferenceRecord 25000000 1,031,171.82 us 20,039.431 us 28,739.954 us 1,024,426.80 us 1.00 0.00 15.0000 10.0000 7000.0000 6000.0000 1000.0000 1243882.6 KB 1.00
EachChunkSeparatelyThenMerge ReferenceRecord 25000000 499,331.39 us 9,248.607 us 9,083.369 us 499,709.20 us 0.48 0.01 48.0000 - 9000.0000 8000.0000 1000.0000 1278411.73 KB 1.03
EachChunkSeparatelyThenCombineArrayBuilders ReferenceRecord 25000000 646,197.00 us 12,286.715 us 14,149.400 us 646,899.35 us 0.63 0.02 32.0000 - 17000.0000 16000.0000 1000.0000 1380103.44 KB 1.11
GroupByInPlaceViaSortAndParallelSegmentation ReferenceRecord 25000000 1,126,593.89 us 22,284.720 us 23,844.401 us 1,128,595.10 us 1.09 0.04 39.0000 - 191000.0000 - - 2441439.05 KB 1.96
SortThenCreateGroups ReferenceRecord 25000000 1,917,150.48 us 26,685.519 us 24,961.651 us 1,916,236.60 us 1.86 0.05 - - - - - 292983.4 KB 0.24
GroupByInPlaceViaSort ReferenceRecord 25000000 1,162,343.91 us 22,973.376 us 30,668.798 us 1,168,378.10 us 1.13 0.05 39.0000 - 191000.0000 - - 2441434.67 KB 1.96
FullyOnParallelFor ReferenceRecord 25000000 742,134.70 us 17,477.832 us 50,706.359 us 741,581.65 us 0.71 0.09 74.5000 - 44500.0000 43500.0000 500.0000 736524.55 KB 0.59
CountByThenAssign ReferenceRecord 25000000 359,754.09 us 7,029.645 us 6,575.534 us 357,133.10 us 0.35 0.01 67.0000 - 128000.0000 - - 1757864.48 KB 1.41
ConcurrentMultiDictionairy ReferenceRecord 25000000 4,100,085.11 us 72,558.068 us 67,870.861 us 4,131,925.10 us 3.97 0.15 596.0000 3.0000 175000.0000 69000.0000 - 2297156.24 KB 1.85
SortByForReference ExpensiveProjection 4000 209.58 us 3.900 us 3.648 us 210.35 us 0.51 0.01 - - 4.8828 0.2441 - 62.55 KB 0.06
ArrayGroupBy ExpensiveProjection 4000 718.65 us 10.591 us 9.907 us 719.66 us 1.75 0.03 - - 40.0391 6.8359 - 496.85 KB 0.47
PLINQDefault ExpensiveProjection 4000 411.47 us 3.213 us 2.683 us 411.06 us 1.00 0.00 15.0000 12.0317 92.7734 70.8008 - 1067.75 KB 1.00
EachChunkSeparatelyThenMerge ExpensiveProjection 4000 261.70 us 2.295 us 2.147 us 262.02 us 0.64 0.01 16.7607 0.0073 63.9648 31.7383 - 714.26 KB 0.67
EachChunkSeparatelyThenCombineArrayBuilders ExpensiveProjection 4000 327.25 us 2.123 us 1.985 us 327.42 us 0.80 0.01 11.4805 0.0054 69.3359 33.6914 - 786.38 KB 0.74
GroupByInPlaceViaSortAndParallelSegmentation ExpensiveProjection 4000 399.82 us 2.529 us 2.112 us 400.20 us 0.97 0.01 19.6343 0.0083 63.9648 4.3945 - 783.44 KB 0.73
SortThenCreateGroups ExpensiveProjection 4000 1,465.41 us 28.429 us 33.843 us 1,460.65 us 3.57 0.09 - - 64.4531 9.7656 - 801.5 KB 0.75
GroupByInPlaceViaSort ExpensiveProjection 4000 395.39 us 2.609 us 2.440 us 395.23 us 0.96 0.01 18.5459 0.0068 63.9648 4.3945 - 784.43 KB 0.73
FullyOnParallelFor ExpensiveProjection 4000 412.99 us 5.410 us 4.518 us 413.02 us 1.00 0.01 17.9897 0.0195 51.2695 50.7813 7.8125 623.23 KB 0.58
CountByThenAssign ExpensiveProjection 4000 370.23 us 2.319 us 2.056 us 369.92 us 0.90 0.01 38.0298 0.0146 85.9375 6.8359 - 1050.07 KB 0.98
ConcurrentMultiDictionairy ExpensiveProjection 4000 1,036.27 us 20.167 us 20.710 us 1,037.36 us 2.51 0.06 29.3477 6.8242 76.1719 74.2188 17.5781 927.89 KB 0.87
SortByForReference ExpensiveProjection 50000 4,296.81 us 85.802 us 84.269 us 4,318.05 us 1.46 0.03 - - 242.1875 242.1875 242.1875 781.38 KB 0.10
ArrayGroupBy ExpensiveProjection 50000 9,397.98 us 184.214 us 197.107 us 9,422.94 us 3.19 0.08 - - 515.6250 218.7500 - 6345.16 KB 0.81
PLINQDefault ExpensiveProjection 50000 2,944.30 us 26.493 us 24.781 us 2,942.98 us 1.00 0.00 15.0000 12.1367 695.3125 406.2500 - 7873.6 KB 1.00
EachChunkSeparatelyThenMerge ExpensiveProjection 50000 2,661.04 us 23.454 us 21.939 us 2,658.85 us 0.90 0.01 20.5469 0.0156 628.9063 550.7813 - 7483.06 KB 0.95
EachChunkSeparatelyThenCombineArrayBuilders ExpensiveProjection 50000 2,778.97 us 33.474 us 31.312 us 2,771.58 us 0.94 0.01 15.6133 0.0039 644.5313 507.8125 - 7757.27 KB 0.99
GroupByInPlaceViaSortAndParallelSegmentation ExpensiveProjection 50000 4,577.04 us 48.030 us 44.927 us 4,578.36 us 1.55 0.02 23.8281 0.0078 765.6250 62.5000 62.5000 9562.8 KB 1.21
SortThenCreateGroups ExpensiveProjection 50000 19,899.75 us 389.133 us 605.833 us 19,744.31 us 6.83 0.27 - - 843.7500 156.2500 156.2500 9913.38 KB 1.26
GroupByInPlaceViaSort ExpensiveProjection 50000 4,407.24 us 86.404 us 96.037 us 4,373.51 us 1.51 0.03 22.7891 0.0156 765.6250 62.5000 62.5000 9563.95 KB 1.21
FullyOnParallelFor ExpensiveProjection 50000 3,125.61 us 47.855 us 44.764 us 3,130.66 us 1.06 0.02 21.3672 0.1875 582.0313 210.9375 70.3125 6436.04 KB 0.82
CountByThenAssign ExpensiveProjection 50000 3,892.87 us 23.798 us 21.097 us 3,886.07 us 1.32 0.01 44.7148 0.0234 1058.5938 242.1875 - 12858.95 KB 1.63
ConcurrentMultiDictionairy ExpensiveProjection 50000 9,247.46 us 143.676 us 134.395 us 9,249.83 us 3.14 0.05 30.0625 0.7344 812.5000 218.7500 62.5000 9340.74 KB 1.19
SortByForReference ExpensiveProjection 100000 9,351.65 us 178.866 us 183.682 us 9,396.19 us 1.15 0.03 - - 484.3750 484.3750 484.3750 1562.71 KB 0.10
ArrayGroupBy ExpensiveProjection 100000 18,742.63 us 369.028 us 439.301 us 18,903.02 us 2.31 0.11 - - 1000.0000 687.5000 31.2500 12676.31 KB 0.82
PLINQDefault ExpensiveProjection 100000 8,146.42 us 162.338 us 242.980 us 8,169.84 us 1.00 0.00 15.0000 9.1875 1468.7500 984.3750 93.7500 15513.37 KB 1.00
EachChunkSeparatelyThenMerge ExpensiveProjection 100000 9,231.62 us 182.520 us 396.782 us 9,303.62 us 1.12 0.06 19.1563 0.0313 1531.2500 1390.6250 515.6250 14721.35 KB 0.95
EachChunkSeparatelyThenCombineArrayBuilders ExpensiveProjection 100000 10,236.62 us 202.357 us 468.994 us 10,303.18 us 1.26 0.06 16.4063 - 1562.5000 1312.5000 515.6250 15230.92 KB 0.98
GroupByInPlaceViaSortAndParallelSegmentation ExpensiveProjection 100000 9,448.75 us 179.984 us 227.623 us 9,423.73 us 1.17 0.04 24.6563 - 1640.6250 140.6250 125.0000 19109 KB 1.23
SortThenCreateGroups ExpensiveProjection 100000 40,596.06 us 715.348 us 669.137 us 40,506.05 us 5.02 0.19 - - 1769.2308 307.6923 307.6923 19818.69 KB 1.28
GroupByInPlaceViaSort ExpensiveProjection 100000 9,098.01 us 177.573 us 190.001 us 9,145.09 us 1.12 0.05 23.4688 0.0469 1640.6250 140.6250 125.0000 19110.02 KB 1.23
FullyOnParallelFor ExpensiveProjection 100000 6,682.14 us 130.418 us 133.929 us 6,697.31 us 0.83 0.03 24.1953 0.1406 1187.5000 390.6250 109.3750 12791.54 KB 0.82
CountByThenAssign ExpensiveProjection 100000 7,956.80 us 40.123 us 37.531 us 7,955.15 us 0.98 0.04 49.4375 0.0156 2125.0000 843.7500 - 25693.51 KB 1.66
ConcurrentMultiDictionairy ExpensiveProjection 100000 17,632.53 us 287.872 us 269.276 us 17,608.94 us 2.18 0.10 32.3125 0.9375 1687.5000 468.7500 125.0000 18725.83 KB 1.21
SortByForReference ExpensiveProjection 500000 48,938.36 us 888.233 us 830.853 us 49,143.65 us 1.06 0.03 - - 272.7273 272.7273 272.7273 7812.67 KB 0.10
ArrayGroupBy ExpensiveProjection 500000 102,377.59 us 2,027.727 us 2,335.134 us 101,585.95 us 2.23 0.07 - - 4800.0000 1600.0000 400.0000 63880.79 KB 0.83
PLINQDefault ExpensiveProjection 500000 46,096.60 us 908.945 us 1,213.415 us 46,188.84 us 1.00 0.00 15.0000 8.7273 6727.2727 2909.0909 636.3636 77161.86 KB 1.00
EachChunkSeparatelyThenMerge ExpensiveProjection 500000 38,158.74 us 625.565 us 585.154 us 38,180.30 us 0.83 0.03 23.1429 - 6142.8571 2500.0000 857.1429 81031.78 KB 1.05
EachChunkSeparatelyThenCombineArrayBuilders ExpensiveProjection 500000 37,537.14 us 745.756 us 1,069.541 us 37,673.69 us 0.81 0.03 17.0000 - 6142.8571 2714.2857 785.7143 82197.17 KB 1.07
GroupByInPlaceViaSortAndParallelSegmentation ExpensiveProjection 500000 39,943.49 us 431.278 us 382.317 us 39,943.13 us 0.87 0.03 27.1538 0.0769 7923.0769 76.9231 76.9231 98566.37 KB 1.28
SortThenCreateGroups ExpensiveProjection 500000 233,864.16 us 4,616.199 us 4,939.281 us 235,568.13 us 5.08 0.18 - - 8333.3333 333.3333 333.3333 105301.08 KB 1.36
GroupByInPlaceViaSort ExpensiveProjection 500000 40,189.55 us 456.169 us 380.922 us 40,292.71 us 0.87 0.03 24.0000 0.0769 7923.0769 76.9231 76.9231 98567.07 KB 1.28
FullyOnParallelFor ExpensiveProjection 500000 28,199.21 us 319.681 us 299.030 us 28,183.58 us 0.61 0.02 37.4063 0.7500 5437.5000 1562.5000 125.0000 65366.47 KB 0.85
CountByThenAssign ExpensiveProjection 500000 39,374.21 us 368.556 us 326.716 us 39,355.13 us 0.86 0.03 58.3077 - 10923.0769 384.6154 153.8462 134616.81 KB 1.74
ConcurrentMultiDictionairy ExpensiveProjection 500000 88,204.91 us 824.345 us 730.761 us 88,126.89 us 1.92 0.06 36.8333 2.1667 8000.0000 2166.6667 166.6667 96521.6 KB 1.25
SortByForReference ExpensiveProjection 2500000 268,646.70 us 5,251.101 us 7,361.311 us 271,492.05 us 1.48 0.04 - - - - - 39062.79 KB 0.11
ArrayGroupBy ExpensiveProjection 2500000 463,600.94 us 9,006.896 us 11,061.277 us 466,292.80 us 2.53 0.09 - - 20000.0000 2000.0000 - 312221.98 KB 0.85
PLINQDefault ExpensiveProjection 2500000 183,193.55 us 2,178.103 us 1,818.815 us 183,833.17 us 1.00 0.00 15.0000 8.3333 24666.6667 5333.3333 333.3333 369248.8 KB 1.00
EachChunkSeparatelyThenMerge ExpensiveProjection 2500000 129,569.38 us 1,626.393 us 1,441.755 us 129,083.11 us 0.71 0.01 36.2500 - 23750.0000 4750.0000 750.0000 385060.28 KB 1.04
EachChunkSeparatelyThenCombineArrayBuilders ExpensiveProjection 2500000 142,487.61 us 2,837.183 us 6,287.001 us 139,881.98 us 0.78 0.04 17.0000 - 24500.0000 5750.0000 750.0000 392931.23 KB 1.06
GroupByInPlaceViaSortAndParallelSegmentation ExpensiveProjection 2500000 195,729.38 us 3,724.528 us 3,657.984 us 195,007.85 us 1.07 0.02 30.0000 - 39000.0000 - - 495873.06 KB 1.34
SortThenCreateGroups ExpensiveProjection 2500000 1,272,841.45 us 6,592.290 us 6,166.432 us 1,275,250.00 us 6.95 0.09 - - 41000.0000 - - 532726.87 KB 1.44
GroupByInPlaceViaSort ExpensiveProjection 2500000 198,657.16 us 2,638.962 us 2,339.371 us 198,622.65 us 1.09 0.02 30.0000 - 39500.0000 - - 495873.55 KB 1.34
FullyOnParallelFor ExpensiveProjection 2500000 140,602.04 us 3,300.819 us 9,628.645 us 138,843.39 us 0.77 0.06 33.5000 1.5000 25000.0000 6000.0000 250.0000 318095.33 KB 0.86
CountByThenAssign ExpensiveProjection 2500000 189,873.64 us 1,871.314 us 1,562.632 us 189,826.90 us 1.04 0.01 53.0000 - 54000.0000 - - 679228.72 KB 1.84
ConcurrentMultiDictionairy ExpensiveProjection 2500000 410,102.01 us 4,027.915 us 3,363.491 us 410,733.40 us 2.24 0.03 44.0000 - 38000.0000 10000.0000 - 487151.42 KB 1.32
SortByForReference ExpensiveProjection 25000000 2,997,750.83 us 56,927.447 us 58,460.297 us 3,008,641.60 us 1.57 0.08 - - - - - 390625.54 KB 0.10
ArrayGroupBy ExpensiveProjection 25000000 5,030,319.23 us 92,134.717 us 86,182.872 us 5,052,374.30 us 2.65 0.16 - - 207000.0000 3000.0000 1000.0000 3374839.84 KB 0.87
PLINQDefault ExpensiveProjection 25000000 1,873,301.92 us 37,215.978 us 109,148.023 us 1,797,427.90 us 1.00 0.00 15.0000 6.0000 211000.0000 10000.0000 1000.0000 3866182.14 KB 1.00
EachChunkSeparatelyThenMerge ExpensiveProjection 25000000 1,110,510.76 us 22,164.254 us 26,384.968 us 1,103,372.20 us 0.58 0.04 48.0000 - 210000.0000 7000.0000 1000.0000 3747248.24 KB 0.97
EachChunkSeparatelyThenCombineArrayBuilders ExpensiveProjection 25000000 1,155,910.47 us 22,774.438 us 21,303.224 us 1,163,524.90 us 0.61 0.03 32.0000 - 210000.0000 7000.0000 1000.0000 3861399.96 KB 1.00
GroupByInPlaceViaSortAndParallelSegmentation ExpensiveProjection 25000000 2,208,790.38 us 43,675.815 us 53,637.823 us 2,219,717.05 us 1.16 0.08 55.0000 - 398000.0000 - - 4965574.49 KB 1.28
SortThenCreateGroups ExpensiveProjection 25000000 12,744,664.90 us 201,867.060 us 188,826.573 us 12,785,177.20 us 6.70 0.37 - - 412000.0000 1000.0000 - 5341263.98 KB 1.38
GroupByInPlaceViaSort ExpensiveProjection 25000000 2,024,106.49 us 40,403.654 us 35,816.787 us 2,021,519.00 us 1.07 0.07 39.0000 - 398000.0000 - - 4965572.68 KB 1.28
FullyOnParallelFor ExpensiveProjection 25000000 1,216,934.09 us 29,873.159 us 88,081.683 us 1,234,085.95 us 0.65 0.06 164.0000 - 247000.0000 58000.0000 - 3285411.7 KB 0.85
CountByThenAssign ExpensiveProjection 25000000 1,940,828.65 us 19,745.722 us 18,470.160 us 1,941,092.50 us 1.02 0.06 296.0000 1.0000 541000.0000 - - 6806150.68 KB 1.76
ConcurrentMultiDictionairy ExpensiveProjection 25000000 4,473,405.91 us 44,335.237 us 41,471.208 us 4,467,218.20 us 2.35 0.13 374.0000 2.0000 354000.0000 35000.0000 - 4811046.5 KB 1.24
SortByForReference ManyResultingBuckets 4000 217.52 us 4.342 us 6.227 us 218.85 us 0.50 0.02 - - 4.8828 0.2441 - 62.55 KB 0.03
ArrayGroupBy ManyResultingBuckets 4000 489.35 us 9.744 us 20.338 us 486.20 us 1.13 0.06 - - 60.5469 30.2734 30.2734 757.57 KB 0.41
PLINQDefault ManyResultingBuckets 4000 437.56 us 8.382 us 8.968 us 436.61 us 1.00 0.00 15.0000 11.3765 156.7383 130.3711 - 1851.98 KB 1.00
EachChunkSeparatelyThenMerge ManyResultingBuckets 4000 1,382.23 us 27.582 us 59.961 us 1,396.25 us 3.18 0.15 8.4004 0.0020 140.6250 115.2344 54.6875 1648.91 KB 0.89
EachChunkSeparatelyThenCombineArrayBuilders ManyResultingBuckets 4000 678.00 us 12.545 us 12.320 us 680.64 us 1.55 0.05 3.5557 0.0020 85.9375 84.9609 42.9688 1041.73 KB 0.56
GroupByInPlaceViaSortAndParallelSegmentation ManyResultingBuckets 4000 234.22 us 1.678 us 1.488 us 234.73 us 0.54 0.01 16.2087 0.0032 54.6875 12.9395 - 661.8 KB 0.36
SortThenCreateGroups ManyResultingBuckets 4000 254.54 us 5.011 us 10.679 us 255.68 us 0.59 0.02 - - 21.4844 8.3008 - 265.92 KB 0.14
GroupByInPlaceViaSort ManyResultingBuckets 4000 235.95 us 1.623 us 1.518 us 235.96 us 0.54 0.01 11.7544 0.0012 50.5371 9.5215 - 620.14 KB 0.33
FullyOnParallelFor ManyResultingBuckets 4000 1,594.99 us 34.203 us 100.849 us 1,589.11 us 3.68 0.20 8.2324 0.0156 140.6250 111.3281 39.0625 1547.48 KB 0.84
CountByThenAssign ManyResultingBuckets 4000 1,181.89 us 20.707 us 19.370 us 1,178.50 us 2.71 0.08 32.4668 44.9688 119.1406 58.5938 29.2969 1247.57 KB 0.67
ConcurrentMultiDictionairy ManyResultingBuckets 4000 16,409.28 us 626.472 us 1,847.166 us 16,462.58 us 33.02 2.00 97.3125 383.0313 343.7500 328.1250 78.1250 3307.49 KB 1.79
SortByForReference ManyResultingBuckets 50000 4,323.66 us 86.321 us 123.799 us 4,311.16 us 0.44 0.02 - - 242.1875 242.1875 242.1875 781.38 KB 0.08
ArrayGroupBy ManyResultingBuckets 50000 7,815.43 us 149.187 us 418.335 us 7,826.07 us 0.82 0.04 - - 484.3750 484.3750 234.3750 4143.5 KB 0.42
PLINQDefault ManyResultingBuckets 50000 9,725.80 us 189.298 us 321.443 us 9,700.45 us 1.00 0.00 15.0000 9.4375 921.8750 718.7500 218.7500 9848.29 KB 1.00
EachChunkSeparatelyThenMerge ManyResultingBuckets 50000 16,434.29 us 339.831 us 996.665 us 16,202.25 us 1.70 0.12 28.6563 - 1187.5000 1156.2500 531.2500 11996.65 KB 1.22
EachChunkSeparatelyThenCombineArrayBuilders ManyResultingBuckets 50000 19,402.20 us 377.509 us 541.411 us 19,315.28 us 1.99 0.07 8.0000 0.0313 1031.2500 1000.0000 343.7500 10293.62 KB 1.05
GroupByInPlaceViaSortAndParallelSegmentation ManyResultingBuckets 50000 4,578.72 us 46.423 us 43.424 us 4,570.87 us 0.46 0.01 19.3203 - 562.5000 210.9375 140.6250 6227.15 KB 0.63
SortThenCreateGroups ManyResultingBuckets 50000 4,481.36 us 60.414 us 56.511 us 4,492.53 us 0.45 0.01 - - 367.1875 343.7500 312.5000 1869.03 KB 0.19
GroupByInPlaceViaSort ManyResultingBuckets 50000 4,569.64 us 53.122 us 49.691 us 4,549.02 us 0.46 0.01 14.3125 0.0078 546.8750 281.2500 218.7500 6176.58 KB 0.63
FullyOnParallelFor ManyResultingBuckets 50000 21,538.60 us 415.879 us 510.737 us 21,537.74 us 2.20 0.09 30.8438 1.5313 1437.5000 1312.5000 656.2500 12761.17 KB 1.30
CountByThenAssign ManyResultingBuckets 50000 12,311.47 us 198.026 us 185.234 us 12,283.57 us 1.25 0.03 44.1250 66.2656 796.8750 765.6250 390.6250 7730.05 KB 0.78
ConcurrentMultiDictionairy ManyResultingBuckets 50000 96,663.90 us 2,319.988 us 6,767.515 us 95,831.44 us 9.67 0.75 58.1429 525.7143 2428.5714 2285.7143 285.7143 27156.02 KB 2.76
SortByForReference ManyResultingBuckets 100000 9,272.27 us 183.455 us 280.155 us 9,173.25 us 0.51 0.03 - - 484.3750 484.3750 484.3750 1562.71 KB 0.11
ArrayGroupBy ManyResultingBuckets 100000 14,464.41 us 283.810 us 278.739 us 14,492.67 us 0.80 0.04 - - 906.2500 890.6250 500.0000 6873.69 KB 0.48
PLINQDefault ManyResultingBuckets 100000 17,878.36 us 357.216 us 827.903 us 17,801.10 us 1.00 0.00 15.0000 9.5313 1593.7500 1437.5000 343.7500 14417.79 KB 1.00
EachChunkSeparatelyThenMerge ManyResultingBuckets 100000 35,416.29 us 695.147 us 1,235.623 us 35,324.24 us 1.97 0.13 30.8667 - 1933.3333 1866.6667 800.0000 18579.4 KB 1.29
EachChunkSeparatelyThenCombineArrayBuilders ManyResultingBuckets 100000 48,959.29 us 957.973 us 1,845.689 us 48,963.96 us 2.73 0.18 11.7273 - 2181.8182 2090.9091 1000.0000 18726.58 KB 1.30
GroupByInPlaceViaSortAndParallelSegmentation ManyResultingBuckets 100000 9,032.65 us 26.017 us 23.063 us 9,031.60 us 0.50 0.02 23.4219 - 1062.5000 484.3750 187.5000 11348.06 KB 0.79
SortThenCreateGroups ManyResultingBuckets 100000 9,015.27 us 176.234 us 258.321 us 9,002.91 us 0.50 0.03 - - 390.6250 375.0000 328.1250 2574.3 KB 0.18
GroupByInPlaceViaSort ManyResultingBuckets 100000 9,473.95 us 186.365 us 311.375 us 9,483.14 us 0.52 0.03 19.4375 0.0469 1078.1250 640.6250 250.0000 11189.58 KB 0.78
FullyOnParallelFor ManyResultingBuckets 100000 39,650.04 us 788.461 us 1,714.049 us 39,312.36 us 2.22 0.15 33.3750 2.0000 2125.0000 2062.5000 937.5000 21134.92 KB 1.47
CountByThenAssign ManyResultingBuckets 100000 18,758.78 us 359.455 us 413.949 us 18,790.91 us 1.04 0.06 39.8750 79.5313 1312.5000 1062.5000 500.0000 12628.72 KB 0.88
ConcurrentMultiDictionairy ManyResultingBuckets 100000 154,551.84 us 3,208.832 us 9,461.315 us 154,452.66 us 8.61 0.62 37.7500 725.2500 3750.0000 3500.0000 250.0000 45524.88 KB 3.16
SortByForReference ManyResultingBuckets 500000 49,168.76 us 966.751 us 1,290.585 us 49,477.68 us 0.69 0.03 - - 300.0000 300.0000 300.0000 7812.68 KB 0.18
ArrayGroupBy ManyResultingBuckets 500000 43,614.02 us 786.422 us 1,049.851 us 43,715.61 us 0.61 0.02 - - 1818.1818 1727.2727 363.6364 20027.18 KB 0.47
PLINQDefault ManyResultingBuckets 500000 71,258.53 us 1,403.369 us 2,383.028 us 71,046.03 us 1.00 0.00 15.0000 7.2857 4714.2857 3714.2857 857.1429 42472.37 KB 1.00
EachChunkSeparatelyThenMerge ManyResultingBuckets 500000 130,573.47 us 2,602.268 us 3,732.096 us 130,647.11 us 1.84 0.09 32.5000 - 4000.0000 3750.0000 1000.0000 59236.23 KB 1.39
EachChunkSeparatelyThenCombineArrayBuilders ManyResultingBuckets 500000 282,532.25 us 5,571.107 us 9,460.163 us 281,784.37 us 3.97 0.19 17.3333 - 5666.6667 5333.3333 1333.3333 74998.8 KB 1.77
GroupByInPlaceViaSortAndParallelSegmentation ManyResultingBuckets 500000 27,240.25 us 414.664 us 387.877 us 27,148.64 us 0.38 0.01 26.6563 0.0313 4093.7500 1125.0000 156.2500 50456.7 KB 1.19
SortThenCreateGroups ManyResultingBuckets 500000 46,405.25 us 922.110 us 986.647 us 46,235.38 us 0.65 0.02 - - 363.6364 363.6364 363.6364 7301.88 KB 0.17
GroupByInPlaceViaSort ManyResultingBuckets 500000 27,400.85 us 413.360 us 386.658 us 27,310.90 us 0.38 0.01 22.2500 - 4062.5000 1125.0000 156.2500 50286.55 KB 1.18
FullyOnParallelFor ManyResultingBuckets 500000 152,930.40 us 3,049.511 us 6,432.453 us 153,400.55 us 2.14 0.12 40.0000 1.5000 3750.0000 3500.0000 500.0000 57234.91 KB 1.35
CountByThenAssign ManyResultingBuckets 500000 33,409.96 us 651.836 us 995.422 us 33,180.81 us 0.47 0.02 45.3750 71.6250 3437.5000 1687.5000 312.5000 40858.77 KB 0.96
ConcurrentMultiDictionairy ManyResultingBuckets 500000 422,734.35 us 18,453.539 us 54,410.677 us 418,555.10 us 5.63 0.52 40.0000 1300.0000 12000.0000 11000.0000 1000.0000 142425.91 KB 3.35
SortByForReference ManyResultingBuckets 2500000 276,605.11 us 5,446.831 us 7,082.419 us 276,659.92 us 1.33 0.04 - - - - - 39062.79 KB 0.25
ArrayGroupBy ManyResultingBuckets 2500000 187,510.02 us 3,728.342 us 5,804.580 us 186,835.07 us 0.91 0.03 - - 7000.0000 6666.6667 666.6667 79757.21 KB 0.50
PLINQDefault ManyResultingBuckets 2500000 208,429.78 us 3,766.635 us 3,523.312 us 207,556.75 us 1.00 0.00 15.0000 7.5000 11500.0000 9000.0000 500.0000 158116.1 KB 1.00
EachChunkSeparatelyThenMerge ManyResultingBuckets 2500000 418,457.62 us 8,135.007 us 9,042.038 us 418,361.40 us 2.00 0.06 49.0000 - 10000.0000 9000.0000 1000.0000 187254.15 KB 1.18
EachChunkSeparatelyThenCombineArrayBuilders ManyResultingBuckets 2500000 738,894.85 us 14,535.547 us 23,054.918 us 734,851.90 us 3.53 0.10 32.0000 - 13000.0000 12000.0000 1000.0000 229297.99 KB 1.45
GroupByInPlaceViaSortAndParallelSegmentation ManyResultingBuckets 2500000 111,870.45 us 2,230.046 us 5,796.187 us 111,739.40 us 0.54 0.03 28.0000 - 19000.0000 - - 245769.18 KB 1.55
SortThenCreateGroups ManyResultingBuckets 2500000 260,211.30 us 5,100.230 us 7,633.784 us 260,603.25 us 1.25 0.05 - - - - - 30738.85 KB 0.19
GroupByInPlaceViaSort ManyResultingBuckets 2500000 117,797.81 us 2,338.502 us 5,033.873 us 117,776.80 us 0.57 0.02 23.0000 - 19000.0000 - - 245595.61 KB 1.55
FullyOnParallelFor ManyResultingBuckets 2500000 407,246.46 us 10,275.007 us 28,980.838 us 411,318.35 us 1.79 0.09 36.0000 - 11000.0000 10000.0000 1000.0000 153837.35 KB 0.97
CountByThenAssign ManyResultingBuckets 2500000 87,655.64 us 1,517.490 us 1,419.461 us 87,502.34 us 0.42 0.01 64.1429 110.0000 15000.0000 3000.0000 285.7143 181477.1 KB 1.15
ConcurrentMultiDictionairy ManyResultingBuckets 2500000 1,783,034.74 us 164,670.654 us 485,535.140 us 1,742,423.10 us 5.54 0.53 858.0000 2418.0000 45000.0000 41000.0000 1000.0000 534701.16 KB 3.38
SortByForReference ManyResultingBuckets 25000000 3,165,567.18 us 28,724.983 us 26,869.367 us 3,167,435.80 us 3.20 0.06 - - - - - 390625.54 KB 0.30
ArrayGroupBy ManyResultingBuckets 25000000 2,342,519.71 us 37,115.338 us 34,717.710 us 2,339,611.10 us 2.36 0.05 - - 63000.0000 62000.0000 1000.0000 762988.84 KB 0.58
PLINQDefault ManyResultingBuckets 25000000 991,286.74 us 19,557.646 us 20,084.263 us 991,492.00 us 1.00 0.00 15.0000 11.0000 82000.0000 58000.0000 - 1305578.7 KB 1.00
EachChunkSeparatelyThenMerge ManyResultingBuckets 25000000 2,211,705.93 us 30,225.523 us 28,272.973 us 2,204,742.70 us 2.23 0.05 54.0000 - 65000.0000 64000.0000 1000.0000 1421367.41 KB 1.09
EachChunkSeparatelyThenCombineArrayBuilders ManyResultingBuckets 25000000 2,853,982.79 us 29,340.233 us 27,444.872 us 2,841,294.80 us 2.88 0.06 32.0000 - 70000.0000 69000.0000 1000.0000 1561055.71 KB 1.20
GroupByInPlaceViaSortAndParallelSegmentation ManyResultingBuckets 25000000 1,143,657.21 us 22,344.792 us 29,054.541 us 1,141,554.25 us 1.15 0.04 39.0000 - 191000.0000 - - 2443036.38 KB 1.87
SortThenCreateGroups ManyResultingBuckets 25000000 2,881,786.34 us 49,664.039 us 48,776.727 us 2,876,170.25 us 2.90 0.08 - - - - - 294410.97 KB 0.23
GroupByInPlaceViaSort ManyResultingBuckets 25000000 1,206,239.95 us 23,248.514 us 21,746.674 us 1,208,476.70 us 1.22 0.03 24.0000 - 191000.0000 - - 2442861.04 KB 1.87
FullyOnParallelFor ManyResultingBuckets 25000000 5,703,665.16 us 113,812.038 us 283,431.469 us 5,674,074.70 us 6.00 0.28 411.0000 1.0000 115000.0000 114000.0000 1000.0000 1742138.93 KB 1.33
CountByThenAssign ManyResultingBuckets 25000000 676,135.88 us 9,115.317 us 8,080.491 us 675,813.50 us 0.68 0.02 128.0000 28.0000 148000.0000 20000.0000 - 1763502.91 KB 1.35
ConcurrentMultiDictionairy ManyResultingBuckets 25000000 9,851,121.86 us 455,921.009 us 1,344,293.383 us 10,031,112.80 us 8.22 0.58 1779.0000 4826.0000 253000.0000 166000.0000 1000.0000 3005849.7 KB 2.30
SortByForReference Struc(...)ckets [23] 4000 156.29 us 3.105 us 3.322 us 157.47 us 0.38 0.01 - - 7.5684 - - 93.8 KB 0.04
ArrayGroupBy Struc(...)ckets [23] 4000 675.91 us 11.710 us 13.940 us 672.06 us 1.65 0.04 - - 88.8672 82.0313 31.2500 991.9 KB 0.40
PLINQDefault Struc(...)ckets [23] 4000 410.19 us 7.980 us 8.195 us 407.14 us 1.00 0.00 15.0000 11.3901 212.8906 186.0352 - 2500.14 KB 1.00
EachChunkSeparatelyThenMerge Struc(...)ckets [23] 4000 1,254.34 us 21.726 us 19.260 us 1,248.43 us 3.05 0.08 8.5996 0.0020 162.1094 125.0000 44.9219 1826.31 KB 0.73
EachChunkSeparatelyThenCombineArrayBuilders Struc(...)ckets [23] 4000 457.25 us 9.089 us 9.725 us 457.98 us 1.12 0.03 4.9487 - 86.9141 86.4258 43.4570 1120.3 KB 0.45
GroupByInPlaceViaSortAndParallelSegmentation Struc(...)ckets [23] 4000 229.99 us 2.819 us 2.499 us 228.90 us 0.56 0.01 16.0964 0.0017 57.6172 19.0430 - 690.55 KB 0.28
SortThenCreateGroups Struc(...)ckets [23] 4000 73.33 us 0.790 us 0.660 us 73.47 us 0.18 0.00 - - 26.1230 11.4746 - 321.83 KB 0.13
GroupByInPlaceViaSort Struc(...)ckets [23] 4000 231.71 us 0.991 us 0.879 us 231.67 us 0.56 0.01 10.9568 0.0005 52.4902 13.4277 - 644.71 KB 0.26
FullyOnParallelFor Struc(...)ckets [23] 4000 1,513.22 us 33.324 us 98.256 us 1,525.62 us 3.71 0.27 7.4941 0.0137 164.0625 128.9063 37.1094 1713.68 KB 0.69
CountByThenAssign Struc(...)ckets [23] 4000 1,078.49 us 7.886 us 6.991 us 1,078.74 us 2.62 0.06 36.3711 43.7109 119.1406 58.5938 29.2969 1390.43 KB 0.56
ConcurrentMultiDictionairy Struc(...)ckets [23] 4000 11,889.37 us 311.969 us 919.849 us 11,913.07 us 27.57 2.51 64.6094 109.7188 484.3750 468.7500 156.2500 4078.77 KB 1.63
SortByForReference Struc(...)ckets [23] 50000 3,109.46 us 18.931 us 17.708 us 3,111.95 us 1.17 0.02 - - 277.3438 277.3438 277.3438 1172.01 KB 0.11
ArrayGroupBy Struc(...)ckets [23] 50000 4,266.62 us 85.103 us 129.961 us 4,249.71 us 1.63 0.06 - - 539.0625 531.2500 195.3125 4983.08 KB 0.48
PLINQDefault Struc(...)ckets [23] 50000 2,653.17 us 49.701 us 46.490 us 2,640.54 us 1.00 0.00 15.0000 10.7383 917.9688 886.7188 - 10466.46 KB 1.00
EachChunkSeparatelyThenMerge Struc(...)ckets [23] 50000 9,624.02 us 192.339 us 438.053 us 9,587.71 us 3.65 0.17 16.7656 0.0156 1046.8750 1000.0000 359.3750 10520.5 KB 1.01
EachChunkSeparatelyThenCombineArrayBuilders Struc(...)ckets [23] 50000 9,877.60 us 196.551 us 410.275 us 9,784.19 us 3.72 0.14 6.3750 0.0156 859.3750 640.6250 296.8750 10446.13 KB 1.00
GroupByInPlaceViaSortAndParallelSegmentation Struc(...)ckets [23] 50000 2,567.17 us 51.235 us 82.735 us 2,550.64 us 0.97 0.03 18.4961 0.0117 507.8125 140.6250 58.5938 5705.4 KB 0.55
SortThenCreateGroups Struc(...)ckets [23] 50000 1,632.65 us 13.373 us 12.509 us 1,635.67 us 0.62 0.01 - - 349.6094 349.6094 302.7344 1693.75 KB 0.16
GroupByInPlaceViaSort Struc(...)ckets [23] 50000 4,193.62 us 82.143 us 94.596 us 4,243.07 us 1.58 0.05 12.7734 - 515.6250 250.0000 93.7500 5612.86 KB 0.54
FullyOnParallelFor Struc(...)ckets [23] 50000 13,944.12 us 276.231 us 576.597 us 13,986.74 us 5.31 0.33 20.9844 0.8438 1328.1250 1281.2500 625.0000 11560.07 KB 1.10
CountByThenAssign Struc(...)ckets [23] 50000 6,561.43 us 17.190 us 14.355 us 6,565.14 us 2.47 0.05 39.9531 45.3984 703.1250 695.3125 281.2500 6847.47 KB 0.65
ConcurrentMultiDictionairy Struc(...)ckets [23] 50000 77,000.25 us 1,724.476 us 5,084.655 us 77,224.95 us 28.39 1.57 39.2857 211.8571 3428.5714 3285.7143 428.5714 36069.12 KB 3.45
SortByForReference Struc(...)ckets [23] 100000 6,431.78 us 29.665 us 27.749 us 6,432.44 us 0.74 0.03 - - 367.1875 367.1875 367.1875 2343.91 KB 0.13
ArrayGroupBy Struc(...)ckets [23] 100000 6,988.28 us 56.575 us 50.152 us 6,967.86 us 0.80 0.03 - - 843.7500 656.2500 218.7500 8498.57 KB 0.48
PLINQDefault Struc(...)ckets [23] 100000 8,684.29 us 172.613 us 472.524 us 8,630.29 us 1.00 0.00 15.0000 9.0000 1734.3750 1671.8750 500.0000 17754.99 KB 1.00
EachChunkSeparatelyThenMerge Struc(...)ckets [23] 100000 25,460.40 us 479.951 us 827.892 us 25,444.15 us 2.95 0.18 24.9063 0.0313 1843.7500 1812.5000 843.7500 17585.29 KB 0.99
EachChunkSeparatelyThenCombineArrayBuilders Struc(...)ckets [23] 100000 32,694.30 us 647.650 us 1,008.313 us 32,895.88 us 3.77 0.20 10.6875 - 2187.5000 2125.0000 937.5000 20578.68 KB 1.16
GroupByInPlaceViaSortAndParallelSegmentation Struc(...)ckets [23] 100000 4,779.55 us 91.305 us 85.406 us 4,776.56 us 0.55 0.02 18.5625 0.0078 945.3125 179.6875 109.3750 10587.86 KB 0.60
SortThenCreateGroups Struc(...)ckets [23] 100000 3,373.09 us 14.102 us 11.776 us 3,373.15 us 0.39 0.01 - - 539.0625 535.1563 492.1875 2670.28 KB 0.15
GroupByInPlaceViaSort Struc(...)ckets [23] 100000 6,444.61 us 111.157 us 98.538 us 6,441.16 us 0.74 0.03 15.4531 0.0078 968.7500 445.3125 156.2500 10494.53 KB 0.59
FullyOnParallelFor Struc(...)ckets [23] 100000 26,639.94 us 522.746 us 873.391 us 26,593.72 us 3.09 0.22 30.0938 1.5938 1937.5000 1906.2500 781.2500 19502.12 KB 1.10
CountByThenAssign Struc(...)ckets [23] 100000 9,294.65 us 185.779 us 375.283 us 9,230.81 us 1.08 0.08 42.0469 42.6719 1078.1250 718.7500 265.6250 10778 KB 0.61
ConcurrentMultiDictionairy Struc(...)ckets [23] 100000 136,063.52 us 3,838.374 us 11,317.532 us 135,351.11 us 15.63 1.53 47.6000 453.8000 6200.0000 6000.0000 600.0000 67586.95 KB 3.81
SortByForReference Struc(...)ckets [23] 500000 36,344.64 us 625.011 us 584.636 us 36,475.25 us 0.79 0.04 - - 428.5714 428.5714 428.5714 11718.96 KB 0.20
ArrayGroupBy Struc(...)ckets [23] 500000 22,406.67 us 348.241 us 325.744 us 22,476.13 us 0.49 0.02 - - 3125.0000 2281.2500 750.0000 30217.48 KB 0.50
PLINQDefault Struc(...)ckets [23] 500000 45,761.50 us 898.218 us 1,619.672 us 45,924.98 us 1.00 0.00 15.0000 7.9091 6545.4545 5545.4545 1181.8182 59950.22 KB 1.00
EachChunkSeparatelyThenMerge Struc(...)ckets [23] 500000 63,097.27 us 1,258.202 us 2,102.174 us 63,033.33 us 1.38 0.07 33.7500 - 4375.0000 3875.0000 1000.0000 60759.25 KB 1.01
EachChunkSeparatelyThenCombineArrayBuilders Struc(...)ckets [23] 500000 132,454.40 us 2,494.793 us 2,969.873 us 132,863.70 us 2.91 0.15 16.5000 - 6750.0000 6500.0000 1750.0000 80958.35 KB 1.35
GroupByInPlaceViaSortAndParallelSegmentation Struc(...)ckets [23] 500000 20,897.87 us 252.922 us 236.583 us 20,986.01 us 0.45 0.02 26.5000 0.0313 4000.0000 218.7500 125.0000 49651.57 KB 0.83
SortThenCreateGroups Struc(...)ckets [23] 500000 18,473.10 us 191.415 us 169.684 us 18,495.69 us 0.40 0.02 - - 406.2500 375.0000 375.0000 10482.76 KB 0.17
GroupByInPlaceViaSort Struc(...)ckets [23] 500000 22,400.15 us 430.361 us 402.559 us 22,384.83 us 0.49 0.02 23.0313 0.0313 4343.7500 1437.5000 468.7500 49558.29 KB 0.83
FullyOnParallelFor Struc(...)ckets [23] 500000 79,957.80 us 1,590.709 us 4,077.596 us 79,951.57 us 1.75 0.11 39.0000 - 4571.4286 3571.4286 714.2857 61357.11 KB 1.02
CountByThenAssign Struc(...)ckets [23] 500000 26,694.15 us 524.825 us 1,107.033 us 26,743.25 us 0.58 0.03 43.9688 33.4063 4281.2500 2406.2500 968.7500 42034.04 KB 0.70
ConcurrentMultiDictionairy Struc(...)ckets [23] 500000 279,369.03 us 8,419.923 us 24,826.332 us 283,448.23 us 5.97 0.65 52.3333 781.6667 14000.0000 12666.6667 666.6667 160546.59 KB 2.68
SortByForReference Struc(...)ckets [23] 2500000 212,070.21 us 4,227.567 us 5,191.832 us 212,199.82 us 2.19 0.09 - - 333.3333 333.3333 333.3333 58594.07 KB 0.26
ArrayGroupBy Struc(...)ckets [23] 2500000 99,900.66 us 1,975.617 us 4,808.925 us 98,102.46 us 1.05 0.05 - - 12600.0000 12400.0000 2800.0000 121943.95 KB 0.54
PLINQDefault Struc(...)ckets [23] 2500000 96,452.38 us 1,900.241 us 2,601.072 us 96,535.35 us 1.00 0.00 15.0000 6.6000 15800.0000 12000.0000 1600.0000 226854.78 KB 1.00
EachChunkSeparatelyThenMerge Struc(...)ckets [23] 2500000 164,435.38 us 3,247.591 us 5,856.077 us 163,981.30 us 1.71 0.09 38.3333 - 11333.3333 11000.0000 1000.0000 193272.64 KB 0.85
EachChunkSeparatelyThenCombineArrayBuilders Struc(...)ckets [23] 2500000 293,462.81 us 5,784.351 us 9,174.593 us 292,745.85 us 3.06 0.12 24.5000 - 15500.0000 15000.0000 2000.0000 238103.21 KB 1.05
GroupByInPlaceViaSortAndParallelSegmentation Struc(...)ckets [23] 2500000 102,626.75 us 2,046.145 us 3,062.573 us 101,703.34 us 1.07 0.04 29.8000 - 19200.0000 - - 244963.74 KB 1.08
SortThenCreateGroups Struc(...)ckets [23] 2500000 95,254.72 us 1,862.656 us 1,912.811 us 95,446.03 us 0.98 0.03 - - 500.0000 500.0000 500.0000 49545.37 KB 0.22
GroupByInPlaceViaSort Struc(...)ckets [23] 2500000 100,262.22 us 1,984.975 us 3,528.291 us 99,991.40 us 1.04 0.05 22.5000 - 19000.0000 500.0000 - 244870.18 KB 1.08
FullyOnParallelFor Struc(...)ckets [23] 2500000 250,829.26 us 11,616.978 us 34,252.922 us 253,591.08 us 2.20 0.20 54.5000 0.5000 17500.0000 17000.0000 1000.0000 217332.7 KB 0.96
CountByThenAssign Struc(...)ckets [23] 2500000 67,866.82 us 1,351.960 us 1,556.919 us 67,480.14 us 0.70 0.02 61.6250 86.2500 17500.0000 5375.0000 1500.0000 198296.68 KB 0.87
ConcurrentMultiDictionairy Struc(...)ckets [23] 2500000 432,869.62 us 21,616.617 us 63,737.084 us 431,566.92 us 4.35 0.73 38.0000 894.5000 28000.0000 19500.0000 1500.0000 318895.2 KB 1.41
SortByForReference Struc(...)ckets [23] 25000000 2,369,664.14 us 26,242.656 us 23,263.431 us 2,366,456.75 us 2.87 0.09 - - - - - 585938.04 KB 0.24
ArrayGroupBy Struc(...)ckets [23] 25000000 903,651.83 us 17,913.943 us 25,112.846 us 900,781.10 us 1.11 0.05 - - 147000.0000 146000.0000 11000.0000 1674451.19 KB 0.68
PLINQDefault Struc(...)ckets [23] 25000000 814,748.32 us 16,166.763 us 30,758.948 us 823,721.00 us 1.00 0.00 15.0000 9.0000 170000.0000 128000.0000 5000.0000 2471250.45 KB 1.00
EachChunkSeparatelyThenMerge Struc(...)ckets [23] 25000000 1,045,369.19 us 18,408.851 us 17,219.650 us 1,047,006.70 us 1.27 0.05 45.0000 - 161000.0000 160000.0000 2000.0000 2026434.9 KB 0.82
EachChunkSeparatelyThenCombineArrayBuilders Struc(...)ckets [23] 25000000 1,398,055.40 us 22,937.628 us 21,455.872 us 1,397,674.50 us 1.70 0.06 32.0000 - 172000.0000 171000.0000 3000.0000 2222751.55 KB 0.90
GroupByInPlaceViaSortAndParallelSegmentation Struc(...)ckets [23] 25000000 996,791.05 us 18,276.950 us 17,096.270 us 1,000,643.10 us 1.21 0.04 53.0000 - 191000.0000 - - 2442232.13 KB 0.99
SortThenCreateGroups Struc(...)ckets [23] 25000000 991,035.05 us 14,724.958 us 13,773.735 us 992,973.70 us 1.21 0.04 - - - - - 488998.74 KB 0.20
GroupByInPlaceViaSort Struc(...)ckets [23] 25000000 999,074.43 us 18,784.500 us 20,099.205 us 997,078.05 us 1.22 0.06 24.0000 - 191000.0000 - - 2442136.58 KB 0.99
FullyOnParallelFor Struc(...)ckets [23] 25000000 2,155,403.82 us 205,291.639 us 605,307.028 us 2,130,117.25 us 2.24 0.66 704.0000 13.0000 179000.0000 178000.0000 1000.0000 2503313.13 KB 1.01
CountByThenAssign Struc(...)ckets [23] 25000000 462,063.22 us 9,112.563 us 14,972.203 us 462,565.00 us 0.57 0.03 111.0000 49.0000 169000.0000 41000.0000 3000.0000 1956288.58 KB 0.79
ConcurrentMultiDictionairy Struc(...)ckets [23] 25000000 3,232,467.80 us 138,328.676 us 407,865.223 us 3,309,435.15 us 3.58 0.48 500.0000 2237.0000 270000.0000 168000.0000 2000.0000 3093646.78 KB 1.25

About

Benchmarks for implementation of Array.Parallel.GroupBy

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages