private static Int64 NextInt64(Random rnd)
{
var buffer = new byte[sizeof(Int64)];
rnd.NextBytes(buffer);
return BitConverter.ToInt64(buffer, 0);
}
上述方法是從該線程:Generate random values in C#哪種方式更好地調用這個id生成方法?
它將在一個抽象事件類被用來產生獨特EVENTID。該類將被頻繁使用,因爲我們需要發送大量事件。當我調用上述事件類的構造方法,該方法的選擇是從性能和的視圖唯一值點更好:
- 創建
Random
對象與new
並把它傳遞到每個時間以上的方法; - 在最初創建一個靜態的
Random
對象,並在需要時使用它重複調用上述方法。
爲什麼不使用GUID,然後`Guid.NewGuid()`? (一個評論,因爲它不回答你的問題 - 這是關於這個代碼的隨機值的有效性) – 2011-04-15 15:46:30
這是一個有效的評論 - 使用隨機生成**唯一的**號碼是一個糟糕的決定。 – MattDavey 2011-04-15 15:51:43
我不能強調使用隨機數字作爲「唯一密鑰」的愚蠢行爲。使用64位隨機數,在約6.1億個項目之後有1%的機會產生副本。這是*可能*連續兩次生成相同的數字。我強烈建議你使用其他方法來生成一個唯一的密鑰。 – 2011-04-15 16:32:20