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

作者:小小的我 时间:2023-03-30 22:07:33 

本文实例总结了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#程序设计有所帮助。

标签:C#,随机数
0
投稿

猜你喜欢

  • mybatis防止SQL注入的方法实例详解

    2022-08-14 03:06:57
  • 深入理解Java虚拟机 JVM 内存结构

    2022-05-01 20:49:57
  • C#使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化

    2023-01-16 02:11:54
  • Unity3d使用FairyGUI 自定义字体的操作

    2022-05-29 16:57:27
  • java中同类对象之间的compareTo()和compare()方法对比分析

    2023-08-15 09:56:57
  • 解决在for循环中remove list报错越界的问题

    2022-01-12 15:27:56
  • SpringBoot项目中分页插件PageHelper无效的问题及解决方法

    2021-07-08 23:25:55
  • 利用openoffice+jodconverter-code-3.0-bate4实现ppt转图片

    2021-07-24 03:11:25
  • 浅谈JVM之java class文件的密码本

    2023-05-28 13:02:39
  • Spring AOP如何自定义注解实现审计或日志记录(完整代码)

    2022-03-28 02:19:34
  • Spring Cloud Alibaba Nacos Config配置中心实现

    2022-08-02 00:43:05
  • springboot实现注册加密与登录解密功能(demo)

    2021-12-15 15:10:08
  • C#实现winform渐变效果的方法

    2023-03-14 00:26:06
  • Android如何在原生App中嵌入Flutter

    2022-03-11 17:06:06
  • 详解SpringCloud mysql实现配置中心

    2023-11-02 05:12:57
  • C#实现视频的批量剪辑功能

    2023-07-15 06:18:30
  • Java中常用的设计模式之装饰器模式详解

    2021-08-28 07:59:15
  • Java虚拟机之类加载

    2022-11-15 05:19:19
  • Android源码学习之工厂方法模式应用及优势介绍

    2023-01-24 06:43:36
  • Android SurfaceView画板操作

    2022-07-10 15:12:23
  • asp之家 软件编程 m.aspxhome.com