【发布时间】:2013-10-12 00:46:44
【问题描述】:
所以在 C# 中创建随机布尔值有几种方法:
- 使用 Random.Next():
rand.Next(2) == 0 - 使用 Random.NextDouble():
rand.NextDouble() > 0.5
真的有区别吗?如果是这样,哪一个实际上具有更好的性能?或者有没有其他我没看到的方法,可能更快?
【问题讨论】:
-
这真的是瓶颈吗?
-
如果不实际运行它(因为任何方法都会非常快),我的猜测是使用
NextBytes预填充字节数组,使用BitArray将其转换为布尔值,并从Queue中检索这些布尔值,直到它被清空,然后重复该过程。使用这种方法,您只使用一次随机化器,因此它产生的任何开销只会在您重新填充队列时发生。这在处理安全随机数生成器而不是常规的Random类时可能很有用。 -
@JoeEnos MS 搞砸了
NextBytes的实现,所以出奇的慢 -
@CodesInChaos 哇,这很有趣——我只是在反汇编程序中查看了它,看看你指的是什么:
buffer[i] = (byte)(this.InternalSample() % 256);——我假设这就是你在说的,他们可以已经取了那个随机整数并将其拆分为 3 个字节,用大约 1/3 的工作填充字节数组。我想知道这是有原因的,还是只是开发人员的疏忽。
标签: c# performance random boolean