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

 更新时间:2015年05月04日 11:51:17   作者:小小的我  
这篇文章主要介绍了C#生成随机数的方法,实例总结了C#生成随机数的相关技巧,非常具有实用价值,需要的朋友可以参考下

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

相关文章

  • js事件模型与自定义事件实例解析

    js事件模型与自定义事件实例解析

    JavaScript一个最简单的事件模型,需要有事件绑定与触发,还有事件删除。本文将对其具体实现代码进行解析,需要的朋友一起来看下吧
    2016-12-12
  • C# 创建Excel气泡图的实例代码

    C# 创建Excel气泡图的实例代码

    这篇文章主要介绍了C# 创建Excel气泡图的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • C#使用this关键字实现串联构造函数调用方法

    C#使用this关键字实现串联构造函数调用方法

    这篇文章主要介绍了C#使用this关键字实现串联构造函数调用方法,实例分析了使用this关键字串联构造函数的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • C#从foreach语句中枚举元素看数组详解

    C#从foreach语句中枚举元素看数组详解

    这篇文章主要给大家介绍了关于C#从foreach语句中枚举元素看数组的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • C#使用RegNotifyChangeKeyValue监听注册表更改的方法小结

    C#使用RegNotifyChangeKeyValue监听注册表更改的方法小结

    RegNotifyChangeKeyValue的最后一个参数传递false,表示以同步的方式监听,这篇文章主要介绍了C#使用RegNotifyChangeKeyValue监听注册表更改的方法小结,需要的朋友可以参考下
    2024-06-06
  • C# 网域账号(Domain)验证的实现

    C# 网域账号(Domain)验证的实现

    本文主要介绍了C# 网域账号(Domain)验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • C# Newtonsoft.Json库的常用属性和方法详解

    C# Newtonsoft.Json库的常用属性和方法详解

    Newtonsoft.Json(也称为Json.NET)是一个非常流行的用于处理JSON数据的库,它提供了丰富的属性和方法,用于序列化和反序列化JSON数据,下面将通过C#代码详细讲解一些常用的属性和方法,并提供详细的代码注释,需要的朋友可以参考下
    2025-03-03
  • C# GDI在控件上绘图的方法

    C# GDI在控件上绘图的方法

    这篇文章主要介绍了C# GDI在控件上绘图的方法,包括了常见的鼠标事件及绘图操作,需要的朋友可以参考下
    2014-09-09
  • Unity3D游戏开发数据持久化PlayerPrefs的用法详解

    Unity3D游戏开发数据持久化PlayerPrefs的用法详解

    在本篇文章里小编给大家整理了关于Unity3D游戏开发之数据持久化PlayerPrefs的使用的相关知识点内容,需要的朋友们参考下。
    2019-08-08
  • .NET使用C#导入Excel文件数据到数据库

    .NET使用C#导入Excel文件数据到数据库

    将Excel文件中的数据导入到数据库中不仅能够提升数据处理的效率和准确性,还能极大地促进数据分析和决策制定的过程,本文将介绍如何在.NET平台使用C#导入Excel文件数据到数据库中,需要的可以参考下
    2024-12-12

最新评论