C# For循环前进太快,没有正确生成随机字符串

C# For循环前进太快,没有正确生成随机字符串,c#,for-loop,random,C#,For Loop,Random,因此,我编写了一个快速程序来测试在foreach语句内部检查布尔值与在循环外部的条件语句中检查布尔值在处理速度方面会有多大不同。为了测试这一点,我让一个函数生成随机字符串并将它们添加到一个列表中,但是生成字符串的for循环似乎进展太快,没有在任何重复中生成不同的字符串。为了解决这个问题,我添加了一个Thread.Sleep15 15毫秒似乎是每次重复生成不同字符串所需的最小时间 我的问题是:有没有可能在没有线程的情况下修复此问题。Sleep15?在每次重复之间等待15毫秒会使程序需要更长的运行时

因此,我编写了一个快速程序来测试在foreach语句内部检查布尔值与在循环外部的条件语句中检查布尔值在处理速度方面会有多大不同。为了测试这一点,我让一个函数生成随机字符串并将它们添加到一个列表中,但是生成字符串的for循环似乎进展太快,没有在任何重复中生成不同的字符串。为了解决这个问题,我添加了一个Thread.Sleep15 15毫秒似乎是每次重复生成不同字符串所需的最小时间

我的问题是:有没有可能在没有线程的情况下修复此问题。Sleep15?在每次重复之间等待15毫秒会使程序需要更长的运行时间,这就使得它非常不实用。如果我想获得统计相关数据,我必须为每个选项运行大约10000次——好的和坏的方式。下面是有问题的for循环:

for (int i = 0; i < 1000; i++) {

                var stringChars = new char[8];
                var random = new Random();

                for (int n = 0; n < stringChars.Length; n++)
                {
                    stringChars[n] = chars[random.Next(chars.Length)];
                }

                var finalString = new String(stringChars);
                data.Add(finalString);
                Thread.Sleep(15);
        }

您遇到的问题是,每次迭代循环时都在重新创建Random类

这是一个问题的原因是因为Random类的默认种子是当前系统时间戳,在重复迭代时,它很可能是相同的值

在for循环的外部创建随机序列将确保按照预期生成psedoo随机序列

试试这个:

var random = new Random();

for (int i = 0; i < 1000; i++) {
    var stringChars = new char[8];

    for (int n = 0; n < stringChars.Length; n++)
    {
        stringChars[n] = chars[random.Next(chars.Length)];
    }

    var finalString = new String(stringChars);
    data.Add(finalString);
}

您应该在for循环的外部创建随机值。谢谢!工作完美。我会尽快接受答案。