C#快速生成随机数

c# 如何快速生成随机整数?
默认的 Random 类构造函数使用时间作为种子,会生成许多重复的随机数,还有更快的方案吗(随机数可以出现重复)?

阅读 9.4k
9 个回答

C#中生成的随机数为什么不随机?

在System.Security.Cryptography命名空间下提供一个名为RNGCryptoServiceProvider的类,它通过更好的算法生成高质量的随机数,通过这种算法生成的随机数,经过成千上万次的测试,并未发现重复,质量的确比Random高了很多。

Random只实例化一次

时间精度高一点

我有一种方法可能没有RNGCryptoServiceProvider方法的精准,但是在一般情况下可以通过这正方法生成很多随机数,性能比RNGCryptoServiceProvider类下的方法要少用一些资源,也比每一次生成一个判断一次要节约资源,能满足一般要求。

public static int[] RandomArray(int minVal, int maxVal)
{
    System.Random rnd = new System.Random();
    byte[] keys = new byte[maxVal + 1];//创建一个byte数组
    rnd.NextBytes(keys);//为byte数组加入随机数字
    int[] items = new int[maxVal + 1];
    for (int i = minVal; i < maxVal + 1; i++)//创建一个顺序整数数组
    {
        items[i] = i;
    }
    Array.Sort(keys, items);//使用随机byte数组打乱顺序整数数组
    int[] result = new int[maxVal + 1];
    return result;
}

希望能帮到你。

新手上路,请多包涵

使用guid

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进