当前位置: 移动技术网 > IT编程>开发语言>c# > C#生成随机数的方法小结

C#生成随机数的方法小结

2019年07月18日  | 移动技术网IT编程  | 我要评论
本文实例总结了c#生成随机数的方法。分享给大家供大家参考。具体分析如下: 开始,很简单地使用system.random类来生成随机数。很快,问题就来了,发现当random

本文实例总结了c#生成随机数的方法。分享给大家供大家参考。具体分析如下:

开始,很简单地使用system.random类来生成随机数。很快,问题就来了,发现当random的生成间隔小于1ms时,随机数就重复了(仅限于每次都新建random对象),因为新建random时候是默认以当前时间作为随机种子的。将random改为单例,重复数的几率小了,但是随机数在一段时间后循环了(伪随机数嘛,没办法,要求不了这么多的)。

所以,特意在网上找了一些资料,并亲自作了一些性能比较,在此作些总结。

system.random

这个是伪随机数生成器

缺点:生成出来的结果会循环,且random对象创建间隔小于1ms的时候产生结果会相同;
优点:生成速度极快;
效率:高,同一个对象产生1,000,000个结果只需要22ms(不含对象创建时间)


system.security.cryptography.randomnumbergenerator

这个是用于产生密码的安全随机数生成器,产生出来的随机数离散度高,产生1,000,000个32位(8-byte)的随机数无重复

缺点:速度很慢,对比system.random是两个数量级的效率差距;
优点:安全度高,产生的结果可看作环境无关,而且可以填充任意长度的字节数组;
效率:低,同一个对象产生1,000,000个结果需要4221ms(不含对象创建时间)


system.guid

这个是guid(uuid)生成器,出来的是128-bit的字节数组,通常被表示为8-4-4-4-12的32个hex字符。

缺点:生成长度一定,而且生成出来的结果可能与环境相关,在高安全需求的环境不适用;
优点:有强大的数学理论支持,在每秒产生10亿笔uuid的情况下,100年后只产生一次重复的机率是50%;
效率:中,产生1,000,000个结果需要255ms(包含guid对象创建时间)


以上3个都可以当作随机数产生器,但相对于大部分的业务需求, guid(uuid)已经适用,而且其碰撞几率在同一个系统内几乎是不可能的。所以在选择产生器时guid是一个不错的选择。

希望本文所述对大家的c#程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网