GUID不唯一的简单证明

GUID不唯一的简单证明

我想证明GUID在一个简单的测试程序中并不是唯一的。我期望下面的代码运行数小时,但它不起作用。我怎么才能让它起作用?

BigInteger begin = new BigInteger((long)0);BigInteger end = new BigInteger("340282366920938463463374607431768211456",10);
 //2^128for(begin; begin<end; begin++)
  Console.WriteLine(System.Guid.NewGuid().ToString());

我在用C#。


动漫人物
浏览 514回答 3
3回答

潇潇雨雨

这会持续超过几个小时。假设它在1 GHz(它不会-它将比这慢得多)循环,它将运行10790283070806014188970年。比宇宙的年龄长830亿倍。假设摩尔定律等等,不运行这个程序要快得多,等上几百年,然后在一台比它快数十亿倍的计算机上运行它。事实上,任何运行时间比CPU速度翻倍(大约18个月)所需时间更长的程序,如果等到CPU速度增加并在运行之前购买一个新CPU(除非您编写它,以便它可以挂起并在新硬件上恢复),就会更快地完成。

Qyouu

GUID在理论上是非唯一的。这是你的证据:GUID是一个128位数。如果不重用旧的GUID,则无法生成2^128+1或更多的GUID。然而,如果太阳的全部能量输出都是为了完成这项任务,那么在它完成之前很长一段时间就会变冷。GUID可以使用许多不同的策略生成,其中一些策略采取特殊措施,以保证给定的机器不会产生两次相同的GUID。在特定算法中发现冲突将表明生成GUID的特定方法是错误的,但一般不会证明任何关于GUID的内容。
打开App,查看更多内容
随时随地看视频慕课网APP