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"一书。我看了至少五十个"随机"问题,但没有一个涉及这种现象。三个注释行是做同一件事的不同方式,我没有在同一构建中执行这两个行。
问题出在这一行:
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
对象只创建一次,只获取一次其种子值。