Random ran = new Random();
byte tmp = (byte)ran.Next(10);
这段代码有替代方案吗?
它似乎没有完全随机的行为。
发生这种情况的原因有多种。一个常见的问题是创建多个实例Random
程序中的类。当使用Random
类,您应该只创建一个实例并从中生成数字。文章在 C# 中创建更好的随机数对原因有很好的解释,并解释了为什么不这样做可能会导致问题。
另一个常见的场景是访问Random
来自多个线程的类对象。System.Random
不是线程安全的(请参阅备注部分的文档Random
),因此可能导致意外和不需要的行为。如果在多线程环境中使用它,那么您需要确保使用某种形式的锁定来防止多个线程尝试同时生成随机数。
为了获得更高程度的安全性和随机性,您可以使用加密安全随机数生成器,例如系统.安全.加密.RNGCryptoServiceProvider。请注意,与使用更安全的随机数生成器相比,会导致性能损失System.Random
.
如果您不需要加密安全的东西,但仍然想要比加密更“随机”的东西Random
您可以使用其他 PRNG(例如 Mersenne Twister)来探索该课程。有很多选项,每种选项都有不同的特征和性能配置文件。您的选择很大程度上取决于您的目标。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)