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

Nik*_*las 33 c# guid

可能重复:
GUID在100%的时间内是唯一的吗?
简单证明GUID不是唯一的

在MSDN中,您可以阅读:

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

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

Mik*_*kis 41

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

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

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

  • @AskeB。当你说“过去 Y 年里每纳秒适合 X 个 GUID”时,我很不清楚你的意思是什么,但似乎你可能正在考虑枚举,如果是这样的话,你就完全没有抓住要点。问题不在于枚举整个 128 位空间需要多长时间,问题在于使用标准随机 GUID 生成算法生成 GUID 时发生冲突的频率。发布 GUID 与枚举 128 位数字完全无关。 (2认同)

Ste*_*n H 19

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

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

  • 我不同意这一点,因为它不是很低.我有一个实际的例子,http://stackoverflow.com/questions/39771/is-a-guid-unique-100-of-the-time/21570510#21570510 (2认同)

rfm*_*tor 10

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

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

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

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

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

string path;

do
{
    path = Guid.NewGuid().ToString(); // Format as needed

} while (File.Exists(path));
Run Code Online (Sandbox Code Playgroud)

  • 它让我感觉更好,你从它只是系统范围到地球独特!我仍然很偏执,因为它不是100%肯定的事实.我宁愿检查数据库以查看它存在,但我知道这会导致更多的开销...... (2认同)