Linux 上 Mono 中的 System.Random 的默认种子
本文关键字:默认 种子 Random System Mono 中的 Linux | 更新日期: 2023-09-27 18:31:01
我对此的证据纯粹是轶事,但似乎 Mono 下新System.Random
实例的默认种子(...至少在我的Xbox顶部的Linux盒子上...更新速度非常慢。我知道这个类并不完全是加密强的或任何东西,但它确实让我感到困扰,因为这段代码的行为在 Windows 上明显不同。
知道它被播种了什么吗?另外,我可以使用什么在Linux/Mono上更好地工作?
编辑:对于一个在制作新的随机实例时保持运行的程序来说,这是一个容易解决的问题(使用时钟刻度作为随机数种子<- 我知道这里有很棒的代码示例),但该程序启动,打印结果,然后停止。
$ roll 2d6
4 (1, 3)
这是琐碎的定义,但它的效果并不好。
即使在Windows上,我认为您也可能会遇到麻烦,具体取决于您的机器有多快。创建Random
实例过快是 .NET 中众所周知的问题,甚至在进程之间也可能发生这种情况。
一些替代方案:
- 使用
RNGCryptoServiceProvider
生成用于程序的随机数据 - 使用
Guid.NewGuid().GetHashCode()
显式为Random
类设定种子 - 运行一个保持活动状态的守护进程(这样您就可以随着时间的推移继续使用相同的
Random
实例),并将随机数分发给请求它们的进程
我不知道第一个选项在 Mono 上是否可用,但它从 .NET 的早期就已经存在了,所以我猜它是。我认为第二种选择是最简单的,可能会正常工作。