using System.Collections.Generic;
public static void Main()
var partitions = new Dictionary<ulong, int>();
const int testCount = 1000000;
const int partitionCount = 16;
const int expectedCountPerPartition = testCount / partitionCount;
for (int i = 0; i < testCount; ++i)
var bytes = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString());
var partition = Crc32Algorithm.Compute(bytes) * (ulong)partitionCount / uint.MaxValue;
partitions.TryGetValue(partition, out count);
partitions[partition] = count + 1;
var results = partitions.Select(kv => new
kv.Key, kv.Value, ratio = (double)kv.Value / expectedCountPerPartition
).OrderBy(kv => kv.Key).ToList();
results.ForEach(r => Console.WriteLine(string.Format("{0}\t{1}\t{2}", r.Key, r.Value, r.ratio)));