【发布时间】:2010-12-09 03:19:55
【问题描述】:
我的类库中的随机数生成器重复返回相同的值时遇到问题。它返回与使用默认构造函数重复初始化的相同值 b/c - 例如:
public static T GetRandomValue<T>(T[] array)
{
int ndx = new Random().Next(array.Length);
return array[ndx];
}
在系统时钟发生变化之前,它会从另一个方法中重复调用,因此它使用相同的随机种子进行初始化,并给出相同的值。 (见SO article for apparently malfunctioning random number generator)它用于为某些文本生成算法选择随机格式字符串。因为每次我的不同位文本使用同质格式字符串生成时,它都会以快速顺序调用,这对于应用程序来说是不可取的。
它通常是从 asp.net 网页调用的,我想知道生成随机序列的最佳方法是什么,而不会给重复调用该方法的页面带来性能问题。
网页调用库方法,该方法调用随机数。我想知道我是否可以将这种方法用于静态数字生成器。从网页调用这样的静态方法是否存在性能问题?
public class Utility
{
public static Random random = new Random();
public static T GetRandomValue<T>(T[] array)
{
int ndx = random.Next(array.Length);
return array[ndx];
}
}
可能还需要锁定“random”和“ndx”。一般而言,在类库中处理这种类型的种子是否有更好的做法?
【问题讨论】: