C#生成隨機數(shù)的方法小結
本文實例總結了C#生成隨機數(shù)的方法。分享給大家供大家參考。具體分析如下:
開始,很簡單地使用System.Random類來生成隨機數(shù)。很快,問題就來了,發(fā)現(xiàn)當random的生成間隔小于1ms時,隨機數(shù)就重復了(僅限于每次都新建Random對象),因為新建random時候是默認以當前時間作為隨機種子的。將random改為單例,重復數(shù)的幾率小了,但是隨機數(shù)在一段時間后循環(huán)了(偽隨機數(shù)嘛,沒辦法,要求不了這么多的)。
所以,特意在網(wǎng)上找了一些資料,并親自作了一些性能比較,在此作些總結。
System.Random
這個是偽隨機數(shù)生成器
缺點:生成出來的結果會循環(huán),且Random對象創(chuàng)建間隔小于1ms的時候產生結果會相同;
優(yōu)點:生成速度極快;
效率:高,同一個對象產生1,000,000個結果只需要22ms(不含對象創(chuàng)建時間)
System.Security.Cryptography.RandomNumberGenerator
這個是用于產生密碼的安全隨機數(shù)生成器,產生出來的隨機數(shù)離散度高,產生1,000,000個32位(8-byte)的隨機數(shù)無重復
缺點:速度很慢,對比System.Random是兩個數(shù)量級的效率差距;
優(yōu)點:安全度高,產生的結果可看作環(huán)境無關,而且可以填充任意長度的字節(jié)數(shù)組;
效率:低,同一個對象產生1,000,000個結果需要4221ms(不含對象創(chuàng)建時間)
System.Guid
這個是GUID(UUID)生成器,出來的是128-bit的字節(jié)數(shù)組,通常被表示為8-4-4-4-12的32個hex字符。
缺點:生成長度一定,而且生成出來的結果可能與環(huán)境相關,在高安全需求的環(huán)境不適用;
優(yōu)點:有強大的數(shù)學理論支持,在每秒產生10億筆UUID的情況下,100年后只產生一次重復的機率是50%;
效率:中,產生1,000,000個結果需要255ms(包含Guid對象創(chuàng)建時間)
以上3個都可以當作隨機數(shù)產生器,但相對于大部分的業(yè)務需求, GUID(UUID)已經適用,而且其碰撞幾率在同一個系統(tǒng)內幾乎是不可能的。所以在選擇產生器時GUID是一個不錯的選擇。
希望本文所述對大家的C#程序設計有所幫助。
相關文章
C#使用Socket實現(xiàn)發(fā)送和接收圖片的方法
這篇文章主要介紹了C#使用Socket實現(xiàn)發(fā)送和接收圖片的方法,涉及C#操作socket發(fā)送與接收文件的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04