先看代码:

在循环中,有的只NEW一个Random,有的每次都NEW 一个Random。

   Console.WriteLine("1.多个Random,默认随机种子,");
for (int i = ; i < ;i++ )
{
Random r1 = new Random();
int v = r1.Next();
Console.Write(v); Console.Write(" ");
System.Threading.Thread.Sleep();
}
Console.WriteLine("\n"); Console.WriteLine("2.多个Random,指定随机种子");
for (int i = ; i < ; i++)
{
Random r2 = new Random();
int v = r2.Next();
Console.Write(v); Console.Write(" ");
System.Threading.Thread.Sleep();
}
Console.WriteLine("\n"); Console.WriteLine("3.一个Random,默认随机种子");
Random r3 = new Random();
for (int i = ; i < ; i++)
{
int v = r3.Next();
Console.Write(v); Console.Write(" ");
System.Threading.Thread.Sleep();
}
Console.WriteLine("\n"); Console.WriteLine("4.一个Random,指定随机种子");
Random r4 = new Random();
for (int i = ; i < ; i++)
{ int v = r4.Next();
Console.Write(v); Console.Write(" ");
System.Threading.Thread.Sleep();
}
Console.WriteLine("\n"); Console.Read();

运行第一次结果:

运行第二次结果:

1.第二种情况中,产生的随机数为固定值
2.第四种情况中,每次产生的一组随机数为固定值.
3.第一和第三种,每次产生的都不相同.(默认随机种子).

查看MSDN,正好也阐述了为什么会出现第二和第四种情况.

如果同一个种子用于单独 Random 对象,则它们将生成相同的一系列随机数字。 这可以是用于创建测试套件,用于处理随机值,或者用于重播从随机数字派生其数据的游戏。 但请注意, Random 不同版本的.NET Framework 下运行的进程中的对象可能会返回不同的随机数字的序列,即使它们使用相同的种子值实例化.
若要生成的随机数的不同序列,您可以种子值依赖于时间,从而产生不同的系列的每个新实例 Random。 参数化 Random(Int32) 构造函数可以采用 Int32 值根据计时周期数以当前时间,而无参数 Random() 构造函数使用系统时钟生成其种子值。 不过,由于时钟具有有限的解决方法,使用无参数构造函数来创建不同 Random 中连续的对象创建生成的随机数的相同序列生成器。 下面的示例阐释了两个 Random 连续实例化的对象生成相同的一系列随机数字。 在大多数 Windows 系统, Random 在另一个 毫秒内创建的对象可能会遇到的相同种子值。

以前一直觉得出现第二种情况和第四种情况中,出现相同随机数是bug,直到今天我遇到如下情况,我发现这个还真是有用.
我写了一个程序,疯狂的制造随机数,往数据库里面直接插入数据.业务数据来自一些固定的客户端,某些客户端可能几天不会产生数据.为了使数据看起来更真实一些,就必须随机一些客户端不产生数据.
开始生成的不产生数据的客户端是随机的,譬如C1,c2,c3.N天后,变成两外的一批客户端不产生数据,譬如C1,C4,C6,C9.(用Timer在N天后触发).
但是这样有一个问题:当我的程序在N天之内被重启后,随机的客户端就变化了.达不到要求.我希望程序在N天内重启的时候,随机出的客户端list,不会变化
这时候,"生成相同的一系列随机数字"就派上用处了.
譬如下面,用这个方法来产生随机种子:

 private int SeedByDate()
{ DateTime now = DateTime.Now();
DateTime dtbegin = new DateTime(DateTime.Now.Year, , ); int diffday = now.DayOfYear % ;//3天一个循环
DateTime result = dtbegin.AddDays(now.DayOfYear - diffday);
return (int)result.Ticks;
}

C#的Random到底该怎么使用的更多相关文章

  1. 与其想当然的 overdesign,不如自己动手做个试验

    Conmajia Jan. 29th, 2019 早在2012年,我曾经针对 C# System.Random 不同的初始化方案专门做过一次试验,得出了单次默认初始化即可获得质量很好的随机数的结论.可 ...

  2. 没看这篇干货,别和我说你会IDEA Debug

    所谓工欲善其事必先利其器,现在idea已经成为java开发者眼中最热门最好用的IDE了.下面这篇文章将总结下idea调试的一些高级技巧. 多线程调试 直接上例子说明,比如下面这段代码 debug模式下 ...

  3. [Machine Learning & Algorithm] 随机森林(Random Forest)

    1 什么是随机森林? 作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来 ...

  4. Java中的Random()函数

    今天在做Java练习的时候注意到了Java里面的一个随机函数——Random,刚开始只是知道这个函数具有随机取值的作用,于是上网搜索了资料一番,做了一下一些关于Random函数的总结:   Java中 ...

  5. objective-c 中随机数的用法 3种:arc4random() 、random()、CCRANDOM_0_1()

    oc 中随机数的用法(arc4random() .random().CCRANDOM_0_1() 1).arc4random() 比较精确不需要生成随即种子 使用方法 : 通过arc4random() ...

  6. paper 85:机器统计学习方法——CART, Bagging, Random Forest, Boosting

    本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest B ...

  7. Sharded实现学习-我们到底能走多远系列(32)

    我们到底能走多远系列(32) 扯淡: 工作是容易的赚钱是困难的 恋爱是容易的成家是困难的 相爱是容易的相处是困难的 决定是容易的可是等待是困难的 主题: 1,Sharded的实现    Sharded ...

  8. linux 终端下敲ctrl-c时,到底发生了什么?(转)

    通过telnet登录到单板,然后按ctrl-c会发生什么情况,流程是怎么样的? 在分析之前,先介绍tty的相关知识.我们可以认为,所有跟输入输出相关的操作,最终都由tty来接管.举例来说,当我们敲 l ...

  9. 统计学习方法——CART, Bagging, Random Forest, Boosting

    本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest B ...

随机推荐

  1. SpringBoot初体验

    1.elipse中创建Springboot项目并启动 具体创建步骤请参考:Eclipse中创建新的Spring Boot项目 2.项目的属性配置 a.首先我们在项目的resources目录下appli ...

  2. dets

    模块说明 提供基于文件的项式存储,项式以元组表示,其中某个位置为键,默认第1位置 Dets为Mniesia所用,后者增加了事务.查询.和分布式支持. Dets文件不能超过2GB. Dets只有set ...

  3. Python实战之Selenium自动化测试web刷新FW

    需求:将手工登录,手工刷新服务器的FW转化为Python+Selenium实现自动化操作. 1.创建用户表,实现数据与脚本分离.需要读取模块. 2.自动化刷新FW. 不说话,直接上代码: 1userd ...

  4. Python GUI - Tkinter tkMessageBox

    Python GUI - Tkinter tkMessageBox: tkMessageBox模块用于显示在您的应用程序的消息框.此模块提供了一个功能,您可以用它来显示适当的消息     tkMess ...

  5. nginx的反向代理功能和缓存功能

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  6. 【转】花开正当时,十四款120/128GB SSD横向评测

    原文地址:http://www.expreview.com/19604-all.html SSD横评是最具消费指导意义的评测文章,也是各类热门SSD固态硬盘的决斗疆场.SSD评测在行业内已经有不少网站 ...

  7. 对象转字典 iOS

    最近在开发SDK,我开放给客户model类设置信息后,对象转字典,POST给后台. 思路:通过Runtime访问属性列表,快速转换成字典. FRObjectToDictionary.h类 p.p1 { ...

  8. Azure环境中Nginx高可用性和部署架构设计

    前几篇文章介绍了Nginx的应用.动态路由.配置.在实际生产环境部署时,我们需要同时考虑Nginx的高可用性和部署架构. Nginx自身不支持集群以保证自身的高可用性,商业版本的Nginx+推荐: T ...

  9. 腾讯云VS AWS :云存储网关性能谁更优?

    p { text-indent: 2em }    随着企业规模的扩大及业务的扩展,现有IT基础设施特别是存储设备无法满足爆炸性的数据增长,企业 IT 部门为了解决该问题,往往面临市场上多种存储产品及 ...

  10. 聊聊Java的字节码

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 巴山楚水凄凉地,二十三年弃置身.怀旧空吟闻笛赋,到乡翻似烂柯人.沉舟侧畔千帆过,病树前头万木春 ...