Even though the documentation recommends creating just one instance of the Random class and using this instead of creating a new instance every time you need one.
You don't think this is necessary? Well let's just do a simple experiment:
We will now create random numbers. Both snippets use a simple generic list of integers.
var items=new List<int>();
The first snippet creates a new instance of the Random type on each call. I also want to highlight that the loop will run 10.000 times creating random numbers from 1 to 30.
for (int i=0; i<10000; i++)
items.Add(new Random().Next(1, 30));
items.Add(new Random().Next(1, 30));
The second snippet only creates one instance and reuses it on each call.
Random rnd=new Random();
for (int i=0; i<10000; i++)
items.Add(rnd.Next(1, 30));
for (int i=0; i<10000; i++)
items.Add(rnd.Next(1, 30));
To get the results, we use a StringBuilder object and just write the distinct numbers into it
var sb=new StringBuilder();
foreach (var i in items.Distinct().OrderBy(x => x))
sb.AppendFormat("{0},", i);
Console.WriteLine("Nums: {0}", sb.ToString());
foreach (var i in items.Distinct().OrderBy(x => x))
sb.AppendFormat("{0},", i);
Console.WriteLine("Nums: {0}", sb.ToString());
Now, let's have a look at the results:
The first style returned the following output
3,6,11,16,22,28,
The second style this output
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
So now you see that using the first style really doesn't provide random numbers. Only 6 numbers out of 30 have been used!
On the opposite the second style seems to return usable random numbers - all numbers have been used.
No comments:
Post a Comment