我已经看过几篇文章,它们讨论的是不要太紧密地生成过多的System.Random
实例,因为它们将从系统时钟中获得相同的值作为种子,并因此返回相同的数字集:
.net framework 4.8似乎是正确的。
但是,查看.net core的源代码,似乎是从System.Random
生成器中播种了在同一线程上生成的[ThreadStatic]
的实例。
因此在我看来,在.net核心中,您现在可以安全地执行以下操作:
Random[] randoms = new Random[1000];
for (int i = 0; i < randoms.Length; i++)
{
randoms[i] = new Random();
}
// use Random instances and they'll all have distinct generated patterns
这是真的吗?我想念什么吗?
注意:假设我们在这里谈论的是单个线程(尽管我不确定它是否重要,因为看起来.net内核使用bcrypt或某种东西为每个线程生成全局生成器种子?)。
编辑: 现在在this票证中对此进行了跟踪。
答案 0 :(得分:5)
这是真的吗?我想念什么吗?
我相信您对源代码的阅读是正确的。但是除非记录下来,否则您不应该依赖此行为。我的猜测是文档只是跟不上实现,但是您可以打开问题here来更新文档。
.NET Core具有许多类似的小改进,出于向后兼容的原因,您可能会犹豫是否要对.NET Framework进行改进。