DooIT@江西搜才网

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  51 随笔 :: 17 文章 :: 1151 评论 :: 28 引用

公告

一直以来,用System.Random都使用的好好的,每次随机的数字都几乎很满意。如下代码
System.Random r = new Random();
int s = r.Next();

但是当我在做项目时,突然遇到一个大量使用随机数的时候,有时候产生的随机数很不随机,经常前后的随机数字都是一样的。到底怎么回事?

google了很久使用以下代码

System.Random r = new Random(uncheck((int)DateTime.Now.ticks));
int s = r.Next();

效果也一样,查阅了MSDN,发现Random()默认就是使用时间作为随机发生器的种子的,在大量使用随机数的时候,ticks还没来得及改变,众所周知,现在我们常用的随机发生器都是伪随机数字,是需要种子的,在种子一样时,产生的随机序列是一样的,因此随机数也就不随机了。

找到了问题,我们对症下药,再每次取随机数之前,我们暂停一毫秒

System.Threading.Thread.Sleep(1);

这样,我们每次的随机种子都不一样了,这样得出的随机数会更随机。

完整代码:

        System.Random random = new Random();
        
        System.Threading.Thread.Sleep(
1);

        
int serial = random.Next();
posted on 2007-07-07 16:24 ttyp 阅读(...) 评论(...) 编辑 收藏