我有一個關於Guid作爲生成ID的方法的問題。我需要能夠爲給定類的每個實例生成一個新的唯一ID(我預計會有幾百個實例)。我包括我下面的代碼:使用C#中的Guid生成實例的唯一ID
class Program
{
static void Main(string[] args)
{
Instance instance1 = new Instance();
Console.WriteLine(instance1.ID);
Instance instance2 = new Instance();
Console.WriteLine(instance2.ID);
Console.ReadKey();
}
}
public static class GenerateID
{
public static string NewID()
{
Guid guid = Guid.NewGuid();
string id = guid.ToString();
return id;
}
}
public class Instance
{
public string ID = GenerateID.NewID();
}
從我所看到的,這種方法可行,並且兩個獨特的ID是,當我運行的代碼都會產生,但我不能夠進行廣泛的測試這一點,因爲我讀到Guid能夠產生像一個ID的badgilion。
我實施上述方式確保ID是每次都是唯一的?或者有沒有碰撞的機會?如果是這樣,將實例分配唯一ID的更好方法是什麼?
編輯:好的,所以我從ppl的答案中學到了Guid本質上並不是100%獨特的(謝謝,我會確保詳細閱讀),但是我的問題是我用來獲取ID的方法可能會提高產生相同兩個ID的機會?或者,這是獲取唯一ID的好方法嗎?
這種關於GUID衝突的愚蠢行爲非常不利。真正的問題是你沒有考慮廉價的解決方案。獲得一個新的ID是微不足道的,比前一個更好。 40億已經是一個龐大的數字,但使用*長*來存儲它,無論你嘗試多麼努力,你都無法在194年內獲得重複。無論您需要使用'++'還是Interlocked.Increment()來使其線程安全,都取決於您。 –