日期:2014-05-18  浏览次数:21130 次

c#中 随机函数数random.next()的怪异问题
在网站中中建立了一个全集静态随机对象
public static Random randObj = new Random( DateTime.Now.Millisecond );
然后用randObj.Next(100)来获取随机数,网站运行一段时间(估计10多个小时)随机数获得都正常,但时间长了后,
获得的随机数始终是0,百思不得其解.
难道Random 获取随机数的总次数是有限的吗?
说明:
整个网站所有的随机数获得,都用这个静态随机对象来产生.
一天大概要调用几十上百万次randObj.Next(100);
完全相同的代码,在另外一台访问量比较小的服务器上,时间再长,随机数都不会出这个问题,真实怪异!

另外会不会是服务器的内存不够了的原因?
或者是网站进程24小时后重启动发生了问题?

------解决方案--------------------
刚测试了下,循环了一亿次,并没有楼主说的情况。。
------解决方案--------------------
别用这个了用Guid吧。
另外可以试试不用静态变量
每次使用时在new一次
randObj = new Random( DateTime.Now.Millisecond ); 
randObj.Next(100)
------解决方案--------------------
random是根据系统时钟计算结果的,也就是对于同一个random,在接近相同的时间内,会产生相同的随机数。
可以每次new一个Random对象,或者每次都修改下random.Next(maxValue)中参数的值
------解决方案--------------------
不一定要每次都new,但你可以考虑当取到的随机数=0的时候new一次~~~
我怀疑是不是伪随机数表用完了导致的......= =||