Last active
August 29, 2015 14:22
-
-
Save faisalmansoor/66dc353e049158f7027a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Numerics; | |
using LinqStatistics; | |
namespace GuidHashCodeTest | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
const int MaxGroups = 1024; | |
var groupCounter = new Dictionary<string, int>(); | |
for (int guidCount = 0; guidCount < 100000000; guidCount++) | |
{ | |
var bytes = Guid.NewGuid().ToByteArray(); | |
var a = new BigInteger(bytes); | |
string bucket = (new BigInteger(Guid.NewGuid().ToByteArray()) % MaxGroups).ToString(); | |
int currentValue; | |
if (groupCounter.TryGetValue(bucket, out currentValue)) | |
{ | |
groupCounter[bucket] = ++currentValue; | |
} | |
else | |
{ | |
groupCounter[bucket] = 1; | |
} | |
if (guidCount > 0 && guidCount % 1000000 == 0) | |
{ | |
var values = groupCounter.Values; | |
if (true) | |
{ | |
Console.WriteLine( | |
"Guid={0}, Spread={1}, Min={2} Max={3} StandDev={4}" , | |
guidCount, | |
groupCounter.Values.Max()-groupCounter.Values.Min(), | |
groupCounter.Values.Min(), | |
groupCounter.Values.Max(), | |
values.StandardDeviation()); | |
} | |
} | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Guid=1000000, Spread=533, Min=422 Max=955 StandDev=24.2159649059843 | |
Guid=2000000, Spread=1074, Min=879 Max=1953 StandDev=37.6685441135815 | |
Guid=3000000, Spread=1558, Min=1353 Max=2911 StandDev=49.2657645011392 | |
Guid=4000000, Spread=2053, Min=1807 Max=3860 StandDev=60.8201522451166 | |
Guid=5000000, Spread=2590, Min=2252 Max=4842 StandDev=73.1386340083162 | |
Guid=6000000, Spread=3097, Min=2740 Max=5837 StandDev=84.2982037366099 | |
Guid=7000000, Spread=3543, Min=3228 Max=6771 StandDev=94.8445664932757 | |
Guid=8000000, Spread=3998, Min=3716 Max=7714 StandDev=105.125139319569 | |
Guid=9000000, Spread=4573, Min=4170 Max=8743 StandDev=116.948080835909 | |
Guid=10000000, Spread=5077, Min=4671 Max=9748 StandDev=128.111570606031 | |
Guid=11000000, Spread=5591, Min=5128 Max=10719 StandDev=138.760693242179 | |
Guid=12000000, Spread=6095, Min=5606 Max=11701 StandDev=149.811574611938 | |
Guid=13000000, Spread=6594, Min=6091 Max=12685 StandDev=160.68179183994 | |
Guid=14000000, Spread=7098, Min=6549 Max=13647 StandDev=171.214790804764 | |
Guid=15000000, Spread=7606, Min=7039 Max=14645 StandDev=182.277517227838 | |
Guid=16000000, Spread=8178, Min=7489 Max=15667 StandDev=194.090818846229 | |
Guid=17000000, Spread=8643, Min=7986 Max=16629 StandDev=204.694922963759 | |
Guid=18000000, Spread=9174, Min=8455 Max=17629 StandDev=215.866966549348 | |
Guid=19000000, Spread=9661, Min=8931 Max=18592 StandDev=226.467955704695 | |
Guid=20000000, Spread=10131, Min=9397 Max=19528 StandDev=236.591916475363 | |
Guid=21000000, Spread=10571, Min=9926 Max=20497 StandDev=246.971511398855 | |
Guid=22000000, Spread=11020, Min=10395 Max=21415 StandDev=256.535216592378 | |
Guid=23000000, Spread=11552, Min=10875 Max=22427 StandDev=267.978735382289 | |
Guid=24000000, Spread=12034, Min=11380 Max=23414 StandDev=279.095188763765 | |
Guid=25000000, Spread=12559, Min=11839 Max=24398 StandDev=290.271895284669 | |
Guid=26000000, Spread=13065, Min=12290 Max=25355 StandDev=300.807782871955 | |
Guid=27000000, Spread=13481, Min=12795 Max=26276 StandDev=310.299102495427 | |
Guid=28000000, Spread=13976, Min=13233 Max=27209 StandDev=320.42649644947 | |
Guid=29000000, Spread=14417, Min=13727 Max=28144 StandDev=330.250779081132 | |
Guid=30000000, Spread=14879, Min=14236 Max=29115 StandDev=340.602955417513 | |
Guid=31000000, Spread=15341, Min=14706 Max=30047 StandDev=350.660012015569 | |
Guid=32000000, Spread=15813, Min=15194 Max=31007 StandDev=361.228122120853 | |
Guid=33000000, Spread=16273, Min=15676 Max=31949 StandDev=371.17516728144 | |
Guid=34000000, Spread=16823, Min=16137 Max=32960 StandDev=382.454776527575 | |
Guid=35000000, Spread=17353, Min=16586 Max=33939 StandDev=393.375159384613 | |
Guid=36000000, Spread=17855, Min=17084 Max=34939 StandDev=404.694705960991 | |
Guid=37000000, Spread=18307, Min=17582 Max=35889 StandDev=414.842384485201 | |
Guid=38000000, Spread=18778, Min=18100 Max=36878 StandDev=425.712218723308 | |
Guid=39000000, Spread=19316, Min=18554 Max=37870 StandDev=436.910837450093 | |
Guid=40000000, Spread=19810, Min=19028 Max=38838 StandDev=447.625319720664 | |
Guid=41000000, Spread=20337, Min=19528 Max=39865 StandDev=459.272239319828 | |
Guid=42000000, Spread=20749, Min=20034 Max=40783 StandDev=468.909183647807 | |
Guid=43000000, Spread=21221, Min=20525 Max=41746 StandDev=479.71513645888 | |
Guid=44000000, Spread=21662, Min=21028 Max=42690 StandDev=489.795216225918 | |
Guid=45000000, Spread=22172, Min=21524 Max=43696 StandDev=501.519149344281 | |
Guid=46000000, Spread=22667, Min=22005 Max=44672 StandDev=512.507062459962 | |
Guid=47000000, Spread=23179, Min=22492 Max=45671 StandDev=523.998462754154 | |
Guid=48000000, Spread=23661, Min=22978 Max=46639 StandDev=534.51875968597 | |
Guid=49000000, Spread=24096, Min=23451 Max=47547 StandDev=543.902078609277 | |
Guid=50000000, Spread=24516, Min=23958 Max=48474 StandDev=553.460058677764 | |
Guid=51000000, Spread=25075, Min=24400 Max=49475 StandDev=564.991286866197 | |
Guid=52000000, Spread=25677, Min=24853 Max=50530 StandDev=577.503141901263 | |
Guid=53000000, Spread=26157, Min=25361 Max=51518 StandDev=588.402902746762 | |
Guid=54000000, Spread=26643, Min=25850 Max=52493 StandDev=599.384230001798 | |
Guid=55000000, Spread=27134, Min=26326 Max=53460 StandDev=610.055057230831 | |
Guid=56000000, Spread=27674, Min=26810 Max=54484 StandDev=621.626780562663 | |
Guid=57000000, Spread=28149, Min=27285 Max=55434 StandDev=631.802318871142 | |
Guid=58000000, Spread=28680, Min=27776 Max=56456 StandDev=643.752176831818 | |
Guid=59000000, Spread=29118, Min=28254 Max=57372 StandDev=653.10326812908 | |
Guid=60000000, Spread=29602, Min=28733 Max=58335 StandDev=663.724181297558 | |
Guid=61000000, Spread=30102, Min=29235 Max=59337 StandDev=674.95817897258 | |
Guid=62000000, Spread=30591, Min=29687 Max=60278 StandDev=685.062484527966 | |
Guid=63000000, Spread=31049, Min=30183 Max=61232 StandDev=695.43897222204 | |
Guid=64000000, Spread=31509, Min=30664 Max=62173 StandDev=705.196038537186 | |
Guid=65000000, Spread=32035, Min=31123 Max=63158 StandDev=716.19355147947 | |
Guid=66000000, Spread=32488, Min=31652 Max=64140 StandDev=727.07627626655 | |
Guid=67000000, Spread=32947, Min=32116 Max=65063 StandDev=736.695674055125 | |
Guid=68000000, Spread=33467, Min=32584 Max=66051 StandDev=747.643858897487 | |
Guid=69000000, Spread=33937, Min=33074 Max=67011 StandDev=758.099136724536 | |
Guid=70000000, Spread=34440, Min=33561 Max=68001 StandDev=769.241112393361 | |
Guid=71000000, Spread=34998, Min=34030 Max=69028 StandDev=781.318689919192 | |
Guid=72000000, Spread=35498, Min=34482 Max=69980 StandDev=791.587575482056 | |
Guid=73000000, Spread=35911, Min=34968 Max=70879 StandDev=800.764636037027 | |
Guid=74000000, Spread=36374, Min=35468 Max=71842 StandDev=811.391879791451 | |
Guid=75000000, Spread=36852, Min=35965 Max=72817 StandDev=822.054946487077 | |
Guid=76000000, Spread=37343, Min=36458 Max=73801 StandDev=833.02699209421 | |
Guid=77000000, Spread=37879, Min=36958 Max=74837 StandDev=845.039283077891 | |
Guid=78000000, Spread=38383, Min=37432 Max=75815 StandDev=855.888826999291 | |
Guid=79000000, Spread=38953, Min=37911 Max=76864 StandDev=868.097693773857 | |
Guid=80000000, Spread=39507, Min=38387 Max=77894 StandDev=879.931327173799 | |
Guid=81000000, Spread=40013, Min=38833 Max=78846 StandDev=890.387947796322 | |
Guid=82000000, Spread=40530, Min=39341 Max=79871 StandDev=902.410147719293 | |
Guid=83000000, Spread=40998, Min=39844 Max=80842 StandDev=913.21003611546 | |
Guid=84000000, Spread=41490, Min=40298 Max=81788 StandDev=923.40049118821 | |
Guid=85000000, Spread=42002, Min=40777 Max=82779 StandDev=934.450279074772 | |
Guid=86000000, Spread=42503, Min=41261 Max=83764 StandDev=945.541565719519 | |
Guid=87000000, Spread=42979, Min=41733 Max=84712 StandDev=955.819414089333 | |
Guid=88000000, Spread=43521, Min=42181 Max=85702 StandDev=966.884331754953 | |
Guid=89000000, Spread=43959, Min=42681 Max=86640 StandDev=976.794744663917 | |
Guid=90000000, Spread=44414, Min=43188 Max=87602 StandDev=987.355276884588 | |
Guid=91000000, Spread=44935, Min=43635 Max=88570 StandDev=998.051870878435 | |
Guid=92000000, Spread=45375, Min=44132 Max=89507 StandDev=1008.04272842343 | |
Guid=93000000, Spread=45940, Min=44626 Max=90566 StandDev=1020.7285975372 | |
Guid=94000000, Spread=46434, Min=45118 Max=91552 StandDev=1031.73841946395 | |
Guid=95000000, Spread=46958, Min=45604 Max=92562 StandDev=1043.16512131862 | |
Guid=96000000, Spread=47424, Min=46116 Max=93540 StandDev=1053.91574107302 | |
Guid=97000000, Spread=47944, Min=46619 Max=94563 StandDev=1065.79704008788 | |
Guid=98000000, Spread=48454, Min=47081 Max=95535 StandDev=1076.43381215448 | |
Guid=99000000, Spread=48938, Min=47583 Max=96521 StandDev=1087.5788688031 | |
Press any key to continue . . . |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment