有最好的随机可能

时间:2014-10-09 12:33:57

标签: c# random

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

我有一个静态变量“Random”,如下所示:

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给我相同的值。

我该如何改进?

谢谢

1 个答案:

答案 0 :(得分:0)

此问题的解决方案为here

本文提供的解决方案是

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());