Random類短時間大量隨機重復的問題


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

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          }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM