关于生成不重复随机数组的问题?

有时候想测试一些模块的性能,不其然地就想到用机器自动生成一些测试数据来,随机数应该是最常用的一种,今天小弟就用了这种简单的方法,生成了上万个随机数,但是问题随之而来,看看生成的随机数组,当中的相临重复占了一大半,这样的测试用例如果用来测试一些排序模块的话,效果可想而知,看看msdn上面的事例,其中有句比较奇怪的代码,就是在循环中让线程停上一会,我仿照的代码如下:

static   void  RandomArray( ref   int [] list)
{
     
for (int i = 0; i < MAXSIZE; i++)
     
{
         Thread.Sleep(
1);
          list[i] 
= new Random().Next(11024 * 1024);
      }

}

回头看看,由于线程暂停了一下,随机种子就在那一刻发生了点变化,生成重复随机数的情况缓减了不少,单依然严重,而且更恐怖的问题是,如果生成在大量的数据,把线程一停再停,机子等得了,我可不当那个争着眼睛的傻瓜啊.

回头再查查msdn,发现了一个CSP提供的随机生成函数,由于是提供给密码生成所用,相邻重复性大大减少,而且运行效率还可以,具体实现代码如下:

         /// <summary>
        
/// 生成随机测试数组
        
/// </summary>
        
/// <param name="list"></param>

         static   void  RandomArray( ref   int [] list)
        
{
            
for (int i = 0; i < MAXSIZE; i++)
            
{
                
//使用简单的随机数生成器
                int randomNum = new Random().Next(11024 * 1024);

                
//使用加密服务生成随机数
                byte[] randomNumber = new byte[1];
                RNGCryptoServiceProvider Gen 
= new RNGCryptoServiceProvider();
                Gen.GetBytes(randomNumber);

                
//合成两者作为随机数
                list[i] = Convert.ToInt32(randomNumber[0]) % randomNum + randomNum;
            }

        }

不过好像只可以生成一个Byte长度的随机数,再长好像就不支持了,所以不得不加上一些自己生成的随机数进行组合,不知道那位大大有更好的解决方案,望能告诉小弟一声,万分感激啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值