我在使用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给我相同的值。
我该如何改进?
谢谢
答案 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());