在循环中有效地生成随机数
以下代码片段在循环中生成随机数时演示了一个常见的陷阱:
<code class="language-csharp">// Inefficient random number generation public static int RandomNumber(int min, int max) { Random random = new Random(); return random.Next(min, max); }</code>
>在紧密的循环中反复调用此功能,例如:
><code class="language-csharp">byte[] mac = new byte[6]; for (int x = 0; x < 6; x++) { mac[x] = (byte)RandomNumber(0, 255); }</code>
>通常会在mac
>Random
解决方案:一个,共享的实例
正确的方法涉及创建一个单个实例并在整个循环中重复使用。 还应考虑用于多线程应用程序的线程安全。 这是一个改进的版本:
>通过使用Random
>实例,我们确保创建一个
<code class="language-csharp">// Efficient and thread-safe random number generation private static readonly Random random = new Random(); private static readonly object syncLock = new object(); public static int RandomNumber(int min, int max) { lock (syncLock) { return random.Next(min, max); } }</code>
>方法。 这保持了生成数字的完整性和随机性。
以上是为什么在紧密的循环中重复呼叫`random.next()`?的详细内容。更多信息请关注PHP中文网其他相关文章!