如何在C#中创建一个支持用maxValue (和/或minValue)填充字节数组的快速随机数生成器?我已经找到了这个http://www.codeproject.com/KB/cs/fastrandom.aspx,但没有这些功能。
发布于 2009-11-24 23:41:36
用整数填充字节的事实与System.Random的典型用例有很大的不同,如果真的需要的话,你可能会把它搞得一团糟。
System.Random是为一般用途而设计的。(事实上,当我对系统随机例程进行速度和分布测试时,我通常会发现它们毫无启发性。)有些情况下,你会想要其他的东西。但你必须非常明确地说明你的需求。多快?你愿意放弃什么?
如果您真的需要“快速”,Marsaglia提供了许多非常快速的随机数生成器,可以根据您的需要进行调整。以下是其中之一Xorshift的几个链接:
对于许多使用
最后一个解决了您以字节为目标的事实。
我只需要几次超快的随机数。在处理器缓慢的游戏机游戏中,随机可能会造成达到帧率目标和不达到目标的差异。你的用例是什么?如果可以的话,一定要使用System.Random。
或者,调整您在问题中链接的例程(作者声称其速度是System.Random的8倍)。
发布于 2009-11-24 23:34:24
对于任何典型的用法,System.Random都足够快。如果您对包含System.Random调用的代码有性能问题,请确保在尝试构建新的随机数之前对代码进行性能分析。您的性能问题很可能不在框架中,而是在您自己的代码中。
如果您在循环中调用Random,请确保您不是在每次迭代中创建新的Random实例,而是重用一个通用的Random实例。这样做将提高性能,因为您不需要为GC创建新的对象以进行清理,并且还将提高生成的随机数的质量。
发布于 2009-11-25 01:47:14
如果您有一个从单位间隔返回数字的随机数生成器,就像您在代码项目文章中提到的那样,那么您可以首先使用该生成器生成值u,然后返回a + (b-a)*u以获取a和b之间的值。
https://stackoverflow.com/questions/1790776
复制相似问题