拥有尽可能好的随机性

本文关键字:随机性 尽可能 拥有 | 更新日期: 2023-09-27 18:26:00

我在C#中遇到了随机对象的问题。

我有一个静态变量"随机"像这样:

private static Random _myRandomObjet = new Random();

在我有了一个自制的计时器(同时循环+秒表以确保精度),它每10ms调用这个方法:

private void MyMethod()
{
      if(_myRandomObjet.Next(0,10) == 9)
      { // 1 chance / 9
         //SOME CODE
         if(_myRandomObjet.Next(0,10) == 9)
         {
         }
         // SOME CODE
      } 
}

这个代码的目的是在10%的情况下输入if,但似乎大多数时候两个random.next给我的值是相同的。

我该如何改进?

感谢

拥有尽可能好的随机性

这里给出了这个问题的解决方案

本文提供的解决方案是

using System;
using System.Threading;
public static class RandomProvider
{    
    private static int seed = Environment.TickCount;
    private static ThreadLocal<Random> randomWrapper = new ThreadLocal<Random>(() =>
        new Random(Interlocked.Increment(ref seed))
    );
    public static Random GetThreadRandom()
    {
        return randomWrapper.Value;
    }
} 

深入阅读这篇文章了解更多细节。

你也可以尝试使用

Random rand = new Random(Guid.NewGuid().GetHashCode());