C#生成隨機數(shù)的方法小結(jié)
本文實例總結(jié)了C#生成隨機數(shù)的方法。分享給大家供大家參考。具體分析如下:
開始,很簡單地使用System.Random類來生成隨機數(shù)。很快,問題就來了,發(fā)現(xiàn)當random的生成間隔小于1ms時,隨機數(shù)就重復(fù)了(僅限于每次都新建Random對象),因為新建random時候是默認以當前時間作為隨機種子的。將random改為單例,重復(fù)數(shù)的幾率小了,但是隨機數(shù)在一段時間后循環(huán)了(偽隨機數(shù)嘛,沒辦法,要求不了這么多的)。
所以,特意在網(wǎng)上找了一些資料,并親自作了一些性能比較,在此作些總結(jié)。
System.Random
這個是偽隨機數(shù)生成器
缺點:生成出來的結(jié)果會循環(huán),且Random對象創(chuàng)建間隔小于1ms的時候產(chǎn)生結(jié)果會相同;
優(yōu)點:生成速度極快;
效率:高,同一個對象產(chǎn)生1,000,000個結(jié)果只需要22ms(不含對象創(chuàng)建時間)
System.Security.Cryptography.RandomNumberGenerator
這個是用于產(chǎn)生密碼的安全隨機數(shù)生成器,產(chǎn)生出來的隨機數(shù)離散度高,產(chǎn)生1,000,000個32位(8-byte)的隨機數(shù)無重復(fù)
缺點:速度很慢,對比System.Random是兩個數(shù)量級的效率差距;
優(yōu)點:安全度高,產(chǎn)生的結(jié)果可看作環(huán)境無關(guān),而且可以填充任意長度的字節(jié)數(shù)組;
效率:低,同一個對象產(chǎn)生1,000,000個結(jié)果需要4221ms(不含對象創(chuàng)建時間)
System.Guid
這個是GUID(UUID)生成器,出來的是128-bit的字節(jié)數(shù)組,通常被表示為8-4-4-4-12的32個hex字符。
缺點:生成長度一定,而且生成出來的結(jié)果可能與環(huán)境相關(guān),在高安全需求的環(huán)境不適用;
優(yōu)點:有強大的數(shù)學(xué)理論支持,在每秒產(chǎn)生10億筆UUID的情況下,100年后只產(chǎn)生一次重復(fù)的機率是50%;
效率:中,產(chǎn)生1,000,000個結(jié)果需要255ms(包含Guid對象創(chuàng)建時間)
以上3個都可以當作隨機數(shù)產(chǎn)生器,但相對于大部分的業(yè)務(wù)需求, GUID(UUID)已經(jīng)適用,而且其碰撞幾率在同一個系統(tǒng)內(nèi)幾乎是不可能的。所以在選擇產(chǎn)生器時GUID是一個不錯的選擇。
希望本文所述對大家的C#程序設(shè)計有所幫助。
相關(guān)文章
C#使用this關(guān)鍵字實現(xiàn)串聯(lián)構(gòu)造函數(shù)調(diào)用方法
這篇文章主要介紹了C#使用this關(guān)鍵字實現(xiàn)串聯(lián)構(gòu)造函數(shù)調(diào)用方法,實例分析了使用this關(guān)鍵字串聯(lián)構(gòu)造函數(shù)的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-01-01
C#使用RegNotifyChangeKeyValue監(jiān)聽注冊表更改的方法小結(jié)
RegNotifyChangeKeyValue的最后一個參數(shù)傳遞false,表示以同步的方式監(jiān)聽,這篇文章主要介紹了C#使用RegNotifyChangeKeyValue監(jiān)聽注冊表更改的方法小結(jié),需要的朋友可以參考下2024-06-06
C#?網(wǎng)域賬號(Domain)驗證的實現(xiàn)
本文主要介紹了C#?網(wǎng)域賬號(Domain)驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04
Unity3D游戲開發(fā)數(shù)據(jù)持久化PlayerPrefs的用法詳解
在本篇文章里小編給大家整理了關(guān)于Unity3D游戲開發(fā)之數(shù)據(jù)持久化PlayerPrefs的使用的相關(guān)知識點內(nèi)容,需要的朋友們參考下。2019-08-08
.NET使用C#導(dǎo)入Excel文件數(shù)據(jù)到數(shù)據(jù)庫
將Excel文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中不僅能夠提升數(shù)據(jù)處理的效率和準確性,還能極大地促進數(shù)據(jù)分析和決策制定的過程,本文將介紹如何在.NET平臺使用C#導(dǎo)入Excel文件數(shù)據(jù)到數(shù)據(jù)庫中,需要的可以參考下2024-12-12

