拥有尽可能好的随机性
本文关键字:随机性 尽可能 拥有 | 更新日期: 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());