C# System.Random 需要睡眠才能工作

本文关键字:工作 System Random | 更新日期: 2023-09-27 18:29:40

for (int i = 1; i <= 55; i++ )
{
    System.Random myRandom = new System.Random();
    //int myInt; 3 lines just alternate method
    //myInt = myRandom.Next();
    //System.Console.WriteLine(myInt);
    System.Console.WriteLine(myRandom.Next());
    Thread.Sleep(15); // if less, trouble
}

我一直得到相同数字的倍数,一次最多二十个,而不是每个连续的数字都不同。出于某种原因,我添加了 sleep 语句,如果值为 15 或更大,它就可以工作。事实上,如果你递增睡眠参数值,你可以"选择"你得到的连续重复数字的数量。设置范围没有区别。循环是否比随机数生成器快?这并不严重,我正在阅读"基本 C# 5.0"一书。我看了至少五十个"随机"问题,但没有一个涉及这种现象。三个注释行是做同一件事的不同方式,我没有在同一构建中执行这两个行。

C# System.Random 需要睡眠才能工作

问题出在这一行:

System.Random myRandom = new System.Random();

它应该在 for 循环之外。为什么?因为它根据计时信息生成一个随机种子,并且当您一个接一个地创建它们时,它们各自获得相同的种子。当您使线程在迭代之间休眠时,时间会发生足够的变化,以便下一个Random获得不同的种子值。

试试这个:

System.Random myRandom = new System.Random();
for(int i = 1; i <= 55; i++)
{
    // Here be the rest of the code
}

现在,Random对象只创建一次,只获取一次其种子值。