码迷,mamicode.com
首页 > 其他好文 > 详细

Random类短时间大量随机重复的问题

时间:2016-02-09 01:19:57      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

先声明一下,我是在那篇文章上看到的解决方法:

http://dl.download.csdn.net/down10/20141103/4b173214e41ff3207305c2470524b0f3.zip?response-
content-disposition=attachment%3Bfilename%3D%E8%84%9A%E6%9C
%AC.zip&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1454872774&Signature=HKeFoCiyZteMjgO9ScKmje
iXMg4%3D

方法其实没啥不同 只是代码由于大神手打,导致代码大小写不清楚,新人看到还得改许多,就如我!所以将代码重新写一遍。一是为了方便大家也是为了怕忘了,毕竟不常用/

其中重点是Guid:全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。GUID一词有时也专指微软对UUID标准的实现。

在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。
 1         //声明一个静态整数变量 通过他的改变 测试后感觉可以是随机数 不再紧靠(就是随机数虽然不同但是 接近)
 2          private static int randomCount = 0;
 3          /// <summary>
 4          /// 利用guid哈希值、当前时间ticks和计数器相乘来计算种子,生成rand变量。
 5          /// </summary>
 6          static float CreateRandomInt()
 7          {
 8              randomCount++;
 9              //s实例化一个Guid类
10              Guid guid = Guid.NewGuid();
11 
12              int key1 = guid.GetHashCode();
13              // 摘要:获取表示此实例的日期和时间的计时周期数。
14              // 返回结果: 表示此实例的日期和时间的计时周期数。该值介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks
15              //     之间。
16              int key2 = unchecked((int)DateTime.Now.Ticks);
17 
18              int seed = unchecked(key1 * key2 * randomCount);
19              // 使用指定的种子值初始化 System.Random 类的新实例。
20              //Seed:用来计算伪随机数序列起始值的数字。如果指定的是负数,则使用其绝对值。
21              //这就保证了rand的不同
22              Random rand = new Random(seed);
23              float newRand = rand.Next(0, 100);
24              return newRand;
25          }

 

Random类短时间大量随机重复的问题

标签:

原文地址:http://www.cnblogs.com/redUnity/p/5185329.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!