我期待生成唯一的ID在我的系统识别一些数据。我使用的串接一些(非唯一相关的)元数据与System.Guid.NewGuid一个复杂的系统()秒。是否有任何缺点这种方法,还是我在清楚了吗?
我期待生成唯一的ID在我的系统识别一些数据。
我建议一个GUID然后,因为它们是通过定义全局唯一标识符。
我使用的是一个复杂的系统,它与System.Guid.NewGuid串接一些(非唯一相关的)元数据()。是否有任何缺点这种方法,还是我在清楚了吗?
那么,既然我们不知道你会考虑一个缺点,这是很难说的。一些可能的弊端浮现在脑海中:
我策划了一系列关于这些,并在接下来的几个星期的GUID等特点物品;看我的博客的详细信息。
当您使用System.Guid.NewGuid()
,你可能还是要检查GUID不已经在你的系统中存在。
虽然GUID是太复杂,是几乎是独一无二的,没有什么可以保证它不只是概率存在。这只是令人难以置信的统计学可能性不大,到是,在几乎所有情况下,它一样是唯一的地步。
生成到相同的GUID就像是买彩票中奖的两倍 - 没有什么实际阻止它,它只是这么不大可能它也可能是不可能的。
大多数时候,你很可能逃脱不检查现有的匹配,但有很多代的事情,或在系统绝对不能失败一个非常极端的情况下,它可能是值得一试。
编辑
让我澄清一下多一点。这是非常,非常不可能的,你会看到过一个重复的GUID。这才是重点。这是“全球唯一的”,意思是有,你可以认为它是唯一一个重复这样一个无限的机会。但是,如果我们谈论的是保持飞机在天空中的代码,监控核反应堆,或在国际空间站处理生活配套,我个人仍然会检查是否有重复的,只是因为它真的是可怕的打的边缘情况。如果你只是写一个博客引擎,而另一方面,勇往直前,用它不检查。
随意使用NewGuid()
。有与它的独特性没有问题。
有太低的概率将产生相同的GUID两次;一个很好的例子可以在这里找到:Simple proof that GUID is not unique
var bigHeapOGuids = new Dictionary<Guid, Guid>();
try
{
do
{
Guid guid = Guid.NewGuid();
bigHeapOGuids.Add(guid ,guid );
} while (true);
}
catch (OutOfMemoryException)
{
}
在某些时候,它只是坠毁,机上OutOfMemory
而不是重复键冲突。