关于.net:System.Random继续返回相同的值

System.Random keeps on returning the same value

我使用的是一个System.Random对象,它是用一个固定种子实例化的,所有这些都是在应用程序中完成的。我正在调用NextDouble方法,经过一段时间后,结果得到0.0。

有什么补救办法吗,还有人遇到过吗?

编辑:我有一个种子,为方便起见,设定为1000。random.nextdouble被称为几十万次。它是一个优化器应用程序,可以运行几个小时,但这实际上发生在执行10-0分钟之后。我最近在应用程序中增加了一些随机调用。


.NET中的随机数生成器不是线程安全的。其他开发人员也注意到了同样的行为,其中一个解决方案如下(http://blogs.msdn.com/brada/archive/2003/08/14/50226.aspx):

1
2
3
4
5
6
7
8
9
10
11
12
class ThreadSafeRandom
{
    private static Random random = new Random();

    public static int Next()
    {
       lock (random)
       {
           return random.Next();
       }
    }
}


你随机播种的频率是多少?只应在程序开始时执行一次。

一旦用一个给定的值播种,它将始终产生完全相同的序列。


其他人已经做了很好的解释和提供解决方案。

不管怎样,埃里克以前回答过一个类似的问题,看看:

输出相同的伪随机发生器

您还可以通过以下网址获得与主题(随机数生成器)相关的更多问题和答案:

stackoverflow.com随机数生成器

基因

另外,这只是对公认答案的补充。


Tomas,我以前遇到过这个"bug",我的解决方案是使变量模块级别:

1
2
3
4
5
6
7
Private Shared _rnd As System.Random()
Public Shared Function RandRange(ByVal low As Integer, ByVal high As Integer) As Integer
    If _rnd Is Nothing Then
        _rnd = New System.Random()
    End If
    Return rnd.Next(low, high)
End Function

看看这个http://msdn.microsoft.com/en-us/library/system.random.aspx,它应该解释为什么您得到相同的值。