一直都知道random随机数可能出现相同的情况,但是一直没具体看为什么,网上一看又是一大堆例子给你出来,一点也不清晰,今天看msdn记录一下,msdn是讲的真的清楚.
实例化随机数生成器
通过向Random类构造函数提供种子值(伪随机数生成算法的起始值)来实例化随机数生成器。 可以显式或隐式提供种子值:
Random(Int32)构造函数使用您提供的显式种子值。
Random()构造函数使用系统时钟提供种子值。 这是实例化随机数生成器最常见的方法。
如果对单独Random的对象使用相同的种子,则它们将生成相同的随机数字序列。 这对于创建处理随机值的测试套件或用于重放从随机数派生其数据的游戏很有用。 但请注意Random ,在不同版本的 .NET Framework 下运行的进程中的对象可能返回不同序列的随机数字,即使它们是用相同的种子值实例化的,也是如此。
若要生成不同的随机数序列,可以使种子值依赖于时间,从而使用的每个新实例Random生成不同的序列。 参数化Random(Int32)构造函数可以根据Int32当前时间中的计时周期数来获取值,而无参数Random()构造函数使用系统时钟生成其种子值。 ·但是,仅在 .NET Framework 上,由于时钟具有有限的分辨率,因此使用无参数构造函数来Random连续创建不同的对象将创建随机生成相同序列的随机数生成器小数·. 下面的示例演示如何在Random .NET Framework 应用程序中连续实例化的两个对象生成相同的随机数序列。 在大多数 Windows 系统上Random ,在15毫秒内创建的对象有可能具有相同的种子值。
所以想生成随机数,无论用几个random,只要保证
1 你的随机种子不同
2 产生随机数的时间间隔>15ms就能产生随机数
这两个条件满足一个就行
鉴于官方提出多个random会产生额外开销,只建议生成一个randow就好了
总结:想生成随机的一堆数
1 一个random(不必要)
2 产生随机数的间隔>15ms
或者
1 多个ranmdom
2 每个random的种子不一样