这会导致多个相同的GUID吗?

时间:2010-06-09 08:29:24

标签: c# guid collision

由于GUID生成是时间相关的,如果在不同线程上的同一时刻多次调用System.Guid.NewGuid(),它是否会返回相同的GUID?

4 个答案:

答案 0 :(得分:7)

在Windows上,GUID(UUID)是使用UuidCreate从加密随机数生成器创建的。它们是RFC 4122的版本4 UUID。除非您使用使用UuidCreateSequential创建的旧版本1 GUID,否则不会涉及时间戳或以太网卡。

另见How Random is System.Guid.NewGuid()? (Take two)

答案 1 :(得分:5)

不,内部有一个序列号会针对每个呼叫进行更改,因此同一系统上不同线程上的多个同时呼叫不会创建重复的Guid。

这并不意味着Guid的可见部分可以看到每次通话的增量。

答案 2 :(得分:0)

Transact-SQL NEWID函数和应用程序API函数和方法根据其网卡的标识号加上CPU时钟的唯一编号生成新的uniqueidentifier值。每个网卡都有唯一的标识号。 NEWID返回的uniqueidentifier值是使用服务器上的网卡生成的。应用程序API函数和方法返回的uniqueidentifier值是使用客户端上的网卡生成的。

。根据msdn,它不会在时间或任何电脑中产生重复。

答案 3 :(得分:0)

除非您的线程在您的计算机上的不同核心上运行,否则在给定时间只有一个线程实际运行。因此,我不认为对NewGuid()的调用很可能会在同一时间进行。