我有一些运行的代码.在循环内部我执行:
System.Random rnd = new System.Random();
Run Code Online (Sandbox Code Playgroud)
如果在运行呼叫之间几乎没有时间延迟,我可以期望该号码是随机的吗?
从文档:
从有限的数字集合中以相等的概率选择伪随机数.所选择的数字不是完全随机的,因为使用确定的数学算法来选择它们,但是出于实际目的它们是足够随机的.Random类的当前实现基于Donald E. Knuth的减法随机数生成器算法的修改版本.有关更多信息,请参阅DE Knuth."计算机编程的艺术,第2卷:半数值算法".Addison-Wesley,Reading,MA,第二版,1981.
生成两个随机数之间的延迟没有考虑在内.当然这指的是调用Random.Next同一个实例,而不是Random每次都像在代码中那样创建一个新实例(这是错误的):
通过创建单个Random对象而不是多个Random对象可以避免此问题.
要提高性能,请创建一个Random对象以随时间生成许多随机数,而不是重复创建新的Random对象以生成一个随机数.
如果需要生成加密强度随机性:
例如,要生成适用于创建随机密码的加密安全随机数,请使用从System.Security.Cryptography.RandomNumberGenerator派生的类,例如System.Security.Cryptography.RNGCryptoServiceProvider.