有什么机会获得Guid.NewGuid()重复?

可能重复:
GUID是100%独一无二的吗?
简单certificateGUID不是唯一的

在MSDN中,您可以阅读:

新Guid的值全部为0或等于任何其他Guid的可能性非常低。

假设您有一个每秒都会创建一个文件的方法,并且您使用方法Guid.NewGuid()来获取文件名,是否可以获得相同的Guid呢? 或者本地计算机会以某种方式跟踪? 机会有多低?

你永远不会用完guids。 复制它们的可能性非常低:

http://betterexplained.com/articles/the-quick-guide-to-guids/

获得两个相同的guid的机会是天文数字的,即使你尽可能快地生成guid也是如此。 (例如,每秒生成数千个guid,仅用于查找副本。)

当然,如果你想要我的意见,我相信会有一段时间,从现在起的几千年,当我们将殖民银河系时,我们的人口将达到数万亿,嵌入的个人电脑数量世界各地都会出现数字,而这些计算机中的每一台计算机都将以今天无法想象的速度生成GUID,当我们开始遇到麻烦时,在银河系的遥远区域偶尔会出现重复的guid,然后它将再次像640k的内存,DLL地狱再次,两位数年的千年虫再次重复,所有这些结合起来。

带有GUID的东西是我们不希望它们变得庞大,因为那样它们就会浪费,所以有人必须拿出一些小到足以让它们不会太浪费但又要足够大的位合理保证防止碰撞。 所以,这是一种技术妥协。 在我们这个世纪,128位似乎是一个很好的折衷方案,但几乎在数学上肯定会有另一个世纪,这种妥协将不再那么好。

总是有一些微不足道的重复机会,但全球唯一标识符就是这样: 全球唯一……不是全系统独特的,但在地球行星中独一无二。

我推测,从理论上讲,您在多个系统中复制UUID的可能性要高于单个系统。 虽然操作系统不会存储它生成的每个GUID,但它可能会使用一些基于时间的种子数据来避免本身的冲突。 当然这取决于实施。

哦,机会……好吧有3.4 x 10 ^ 38可用, 维基百科说你更有可能被陨石击中。

我还将提供一种替代方法, Path.GetTempFileName()方法可能值得研究,因为它具有防止冲突的保护……虽然它只能在抛出exception之前创建65,535个唯一文件名, 如果之前的文件不是删除

除此之外,做起来并不困难:

 string path; do { path = Guid.NewGuid().ToString(); // Format as needed } while (File.Exists(path)); 

有关冲突的信息,请阅读以下问题: GUID冲突是否可能?

关于“每秒一个guid”,生成的guid通常需要时间考虑,所以在同一台计算机上,除非你改变内部时钟的设置,否则有机会生成相同的guid

编辑 :显然关于guids 的维基百科页面说在构建guid时时间不是强制性的,所以我猜这取决于所使用的算法。 既然我们正在谈论C#(在Windows上?)它实际上是一个UUID ,其确实包括某些版本的时序。

在GUID发生冲突之前,您肯定会耗尽磁盘空间或堵塞文件系统。 只是在优雅地创建文件时处理错误,你会没事的。

每隔一秒创建它时,您不必担心会出现重复的GUID。 您可以参考http://en.wikipedia.org/wiki/Universally_unique_identifier并阅读重复GUID的概率。