C# 可以创建相同的guid吗

C# 可以创建相同的guid吗,c#,.net,guid,C#,.net,Guid,是否可以在一个应用程序中创建相同的guid Guid id = Guid.NewGuid(); GUID中的U表示唯一。;-)所以这是不可能的 Guid.NewGuid()将始终在全球范围内创建唯一的Guid,而不仅仅是在单个应用程序中。从技术上讲,是的。例如,创建的Guid如下所示: 26de36b7-76f5-4f17-8f9d-44eb429f151b 这意味着32个字符可以是字母(26种可能性)或数字(10种可能性) 这意味着每个职位有36个职位,总共36^32个职位,约为60000

是否可以在一个应用程序中创建相同的guid

Guid id = Guid.NewGuid();

GUID中的U表示唯一。;-)所以这是不可能的

Guid.NewGuid()将始终在全球范围内创建唯一的Guid,而不仅仅是在单个应用程序中。

从技术上讲,是的。例如,创建的Guid如下所示:

26de36b7-76f5-4f17-8f9d-44eb429f151b
这意味着32个字符可以是字母(26种可能性)或数字(10种可能性)

这意味着每个职位有36个职位,总共36^32个职位,约为6000000个

这意味着,如果你每千分之一秒创建2 000 000个guid(这是不可能的),你将平均一次创建两次相同的guid,并且所有其他guid都是唯一的


在实践中也是如此。否;)

如果您询问创建重复Guid的
Guid.NewGuid()
风险是否很高,则答案是否。这一问题来自:

GUID的值表示为32个字符的十六进制字符串,如{21EC2020-3AEA-1069-A2DD-08002B30309D},通常存储为128位整数。唯一键的总数是2128或3.4×1038——大约是地球总体积的2万亿每立方毫米。这个数字如此之大,以至于同一个数字被生成两次的概率非常小

如果您问我们如何创建两个重复的GUI,那么以下是答案:

Guid g1 = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309D");
Guid g2 = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309D");
理论上?对

真的吗?与创建两个相同的guid相比,即使是在单个应用程序中,您也有更高的机会连续10次中奖


请看

事实上,我刚刚经历了这种情况。我有一个包含7项的数据库表。从我的程序中,我添加了一个新实例,使用
Guid.NewGuid()
作为其ID。我得到了一个
DbUpdateException
告诉我该ID与现有ID相同。再试一次,效果很好。

事实上,在你的余生中,每周中彩票的几率可能会更大(如果几率不太大的话);)但事实确实如此。不太可能,但仍然可能。不再是了,请检查规格。Windows至少使用了GUID规范的V4,唯一部分已缩减为单个系统。不太可能跨系统生成重复密钥,但仍然有可能。它可以帮助您。这种可能性非常小,以至于你会看到冲突,我会寻找bug/线程问题,而不是怀疑guid算法本身——请看。guid不是表示为十六进制吗?如果是这样,你没有26个字母可供选择,你只有6个。@CraigW.-这是一个很好的观点:)这意味着数学有点复杂,但理论仍然是一样的:有16种可能性,这意味着可能的guid总数是3,4e38,而不是6,33e49。仍然足够高以避免碰撞。