C#生成隨機數的辦法小結。本站提示廣大學習愛好者:(C#生成隨機數的辦法小結)文章只能為提供參考,不一定能成為您想要的結果。以下是C#生成隨機數的辦法小結正文
本文實例總結了C#生成隨機數的辦法。分享給年夜家供年夜家參考。詳細剖析以下:
開端,很簡略地應用System.Random類來生成隨機數。很快,成績就來了,發明當random的生成距離小於1ms時,隨機數就反復了(僅限於每次都新建Random對象),由於新建random時刻是默許以以後時光作為隨機種子的。將random改成單例,反復數的概率小了,然則隨機數在一段時光後輪回了(偽隨機數嘛,沒方法,請求不了這麼多的)。
所以,特地在網上找了一些材料,並親身作了一些機能比擬,在此作些總結。
System.Random
這個是偽隨機數生成器
缺陷:生成出來的成果會輪回,且Random對象創立距離小於1ms的時刻發生成果會雷同;
長處:生成速度極快;
效力:高,統一個對象發生1,000,000個成果只須要22ms(不含對象創立時光)
System.Security.Cryptography.RandomNumberGenerator
這個是用於發生暗碼的平安隨機數生成器,發生出來的隨機數團圓度高,發生1,000,000個32位(8-byte)的隨機數無反復
缺陷:速度很慢,比較System.Random是兩個數目級的效力差距;
長處:平安度高,發生的成果可看做情況有關,並且可以填充當意長度的字節數組;
效力:低,統一個對象發生1,000,000個成果須要4221ms(不含對象創立時光)
System.Guid
這個是GUID(UUID)生成器,出來的是128-bit的字節數組,平日被表現為8-4-4-4-12的32個hex字符。
缺陷:生生長度必定,並且生成出來的成果能夠與情況相干,在高平安需求的情況不實用;
長處:有壯大的數學實際支撐,在每秒發生10億筆UUID的情形下,100年後只發生一次反復的機率是50%;
效力:中,發生1,000,000個成果須要255ms(包括Guid對象創立時光)
以上3個都可以看成隨機數發生器,但絕對於年夜部門的營業需求, GUID(UUID)曾經實用,並且其碰撞概率在統一個體系內簡直是弗成能的。所以在選擇發生器時GUID是一個不錯的選擇。
願望本文所述對年夜家的C#法式設計有所贊助。