gpt4 book ai didi

c# - System.Random 的多个实例是否仍然在 .Net Core 中使用相同的种子?

转载 作者:太空狗 更新时间:2023-10-29 19:40:17 25 4
gpt4 key购买 nike

我看过几篇文章讨论不要生成太多的 System.Random 实例太靠近,因为它们将从系统时钟中以相同的值作为种子,从而返回相同的集合数字:

  1. https://stackoverflow.com/a/2706537/2891835
  2. https://codeblog.jonskeet.uk/2009/11/04/revisiting-randomness/
  3. https://learn.microsoft.com/en-us/dotnet/api/system.random?view=netframework-4.8#instantiating-the-random-number-generator

这似乎适用于 .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 中对此进行跟踪门票。

最佳答案

Is this true? Am I missing something?

我相信您对源代码的阅读是正确的。但是你不应该依赖这种行为,除非它被记录在案。我的猜测是文档根本跟不上实现,但你可以打开一个问题 here更新文档。

.NET Core 有很多像这样的小增强功能,出于向后兼容性的原因,您可能会犹豫是否对 .NET Framework 进行增强。

关于c# - System.Random 的多个实例是否仍然在 .Net Core 中使用相同的种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57631207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com