您的位置:首页 > 其它

正确使用Random类

2008-04-14 19:53 288 查看

正确使用Random类

Random类表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。它的使用也很简单,只需要new一个Random对象,然后使用它所提供的各种方法就可以产生各种伪随机数。注意这里是随机数,而不是随机数。
Random对象的使用也有需要注意的地方,请看下面这样一个小程序,你看出它的问题了吗?
using System;
namespace RandomSample
{
public class RandomTest
{
public static void Main()
{
for(int i=0; i<10; i++)
{
Random ran = new Random();
Console.WriteLine(ran.NextDouble());
}
}
}
}
噢,它生成的数都是相同的!为什么呢?让我们来看一下MSDN文档吧,或许从中可以找到答案。
随机数的生成是从种子值开始。如果反复使用同一个种子,就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的系列。默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的刻度数采用 Int32 值。但由于时钟分辨率有限,频繁地创建不同的 Random 对象会创建出产生相同随机数序列的随机数生成器。通过创建单个而不是多个 Random 对象可以避免此问题。要提高性能,请创建一个 Random,以便随着时间的推移可以生成很多随机数,而不要重复新建 Random 来生成一个随机数。
是的,我们犯了一个错误,频繁的创建了多个Random对象!而且也制造了很多垃圾对象!解决方法也很简单,只需要这样编码即可:
using System;
namespace RandomSample
{
public class RandomTest
{
public static void Main()
{
Random ran = new Random();
for(int i=0; i<10; i++)
{
Console.WriteLine(ran.NextDouble());
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: