C#中random()方法的刷新率是多少?

时间:2015-12-21 20:51:18

标签: c# random refresh

我将在for循环中生成100个随机数。唯一的问题是,由于random()方法是基于计时器的,它将连续生成3-4次相同的数字。 我可以通过在循环中包含一个threat.sleep()方法来解决这个问题。因此,我想知道random()方法的确切刷新率,以便我可以匹配threat.sleep()方法,而不会延迟超过必要的延迟。

这是我的代码:

for (int i; i <= 100; i += 1)
{        
    Random rndNum = new Random();
    Console.WriteLine(rndNum.Next(1, 100));
    Thread.Sleep(X); //I want to know the best value of X (as less delay as possible) 
}

非常感谢

/ HamMan4Ever

2 个答案:

答案 0 :(得分:1)

我从未听说过或读过Random类是基于计时器的。您可能已经听说系统时间播种,但之后对Next的每次调用都会返回一个通常与之前不同的随机数。通常情况下,当您看到来自Random的非随机数据时,因为您通过循环在每次迭代中创建新的随机数,就像您在共享的代码中一样。由于每个都是从系统时钟播种的,并且您可以非常快速地创建几个,因此您会看到重复的模式。在循环外创建Random以解决此问题。

答案 1 :(得分:0)

它等于系统时钟的刷新率,因为它将时间用作种子。但是对于你的工作,你应该将Random实例保持在循环之外。

xx := case a 
       when 'x' then 'b'
       when 'y' then 'c'
       else 'z'
      end;

xx := case
       when a='x' then 'b'
       when a='y' then 'c'
       else 'z'
      end;

由于它使用时间作为种子,因此只使用时间作为种子,即使您同时多次调用它,也会生成随机数,只要您使用相同的实例。