System.Random继续返回相同的值

时间:2008-11-17 15:36:56

标签: .net random

我正在使用System.Random对象,该对象在整个应用程序中使用固定种子进行实例化。我正在调用NextDouble方法,经过一段时间后,我得到0.0结果。

对此有任何补救措施,还有其他人遇到过吗?

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

5 个答案:

答案 0 :(得分:17)

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

class ThreadSafeRandom
{
    private static Random random = new Random();

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

答案 1 :(得分:8)

你多久播种一次?它应该只在程序开始时完成一次。

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

答案 2 :(得分:2)

Tomas,我之前遇到过这个“bug”,我的解决方案是让_rnd变量模块级别:

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

答案 3 :(得分:2)

其他人已经做了很好的工作来解释它并提供解决方案。

无论如何,Erik之前已经回答了一个类似的问题,请查看:

Pseudo Random Generator with same output

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

Stackoverflow.com random-number-generator

基因

P.S。这只是为了补充已接受的答案。

答案 4 :(得分:1)

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

相关问题