The seed is in milliseconds in the range of 10 milliseconds to 16 milliseconds. But the most important thing to remember is that you should always use the same instance of Random
if you can to generate different "random" values. If you always create a new instance in a tight loop you get the same value lots of times.
So it is "safe" to use the default constructor if you use the same instance anyway. If not because you need them in different threads, you can use this helper class from Jon Skeet(from here):
public static class RandomHelper
{
private static int seedCounter = new Random().Next();
[ThreadStatic]
private static Random rng;
public static Random Instance
{
get
{
if (rng == null)
{
int seed = Interlocked.Increment(ref seedCounter);
rng = new Random(seed);
}
return rng;
}
}
}