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,它应该解释为什么您得到相同的值。