如何在C#中生成GUID?
答案 0 :(得分:44)
有一篇非常好的文章here描述了如何生成GUID,特别是为什么guid的子字符串不被保证是唯一的。
基本上使用
的组合生成GUID然而,这只是一个用于生成GUID 的特定算法(虽然我相信它是.Net框架使用的那个),而不是the one used by the .Net framework
答案 1 :(得分:13)
此算法在此处记录为Globally unique identifier
答案 2 :(得分:10)
原始问题:
<。> .NetGuid如何生成它的标识符?它将如何输出 如果我使用以下代码Guid g = Guid.NewGuid();
输出是否是数字和字母组合或 只有数字会在那里???
System.Guid
只是一个128位整数(16个字节)。数字和字母与它无关。您可以使用ToString()方法查看Guid的各种“人类可读”版本,其中包括数字0-9和字母AF(表示十六进制值),但这完全取决于您希望如何输出它。 / p>
答案 3 :(得分:1)
除了“随机16字节”之外,还有其他形式的GUID,如RFC中所述。某些Microsoft产品(例如SQL Server)可以选择性地生成这些“顺序GUID”,它们基于“系统中第一个网卡的MAC地址+基于系统时间的不断增加的计数器”的组合。
当用作具有聚簇索引的数据库主键时,这些“顺序GUID”具有始终将新记录附加到数据库表的“结尾”的良好属性。这有助于防止数据库索引碎片和页面拆分。
如果随机GUID用作具有聚簇索引的数据库主键,则新记录将从物理分配的角度随机插入表的“中间”,这会导致索引碎片和部分完整的数据库页面随着时间的推移。
使用顺序GUID仍允许您在多个系统上独立生成GUID,并确信不会发生任何冲突(使用顺序整数作为主键而不分配“范围”或不同种子和增量的属性每个系统,这是大型分布式应用程序中的管理噩梦。)
答案 4 :(得分:0)
简而言之,GUID是一个随机的128位整数,但我们使用十六进制数字对它们进行格式化,以便它们易于阅读(这是您看到的8-4-4-4-12格式)。至于它的生成方式,请参阅链接的维基百科文章。
答案 5 :(得分:0)
GUID的位分解如下:
总共128位。
答案 6 :(得分:0)
这取决于。对于Unix GUID中的.NET Core,可通过创建随机数的128位并执行几位逐位操作来生成。在Windows的.NET Core和.NET框架中,它对Windows函数UuidCreate进行远程过程调用(因此,如何生成它们完全取决于Windows版本)。对于Unix和Windows的最新版本,您会注意到有一个十六进制数字始终为4。这是因为它是Uuid 4的版本号,仅表示它们是用随机字节生成的。 GUID以前是用时间戳和MAC地址之类的东西生成的,但是由于它告诉最终用户有关系统的信息,并帮助他们更容易地预测将来的GUID,因此成为攻击媒介。
答案 7 :(得分:-1)
Guid是一个唯一的数字,有数十亿个排列,由十六进制和数字组合组成。它是根据不同因素生成的,如时间,Windows版本,系统资源,如硬盘,主板,设备等。 保证Guid是唯一的。(谢谢ck!)我还没有看到你做过的实例
Guid g = new Guid.NewGuid();Guid g = Guid.NewGuid(); /* Thanks Dave! */
其中g
在连续运行中具有相同的值。
它更常用于互斥锁,一个例子是创建应用程序的单个实例,并使用带有guid的互斥锁来保证应用程序实例的生命周期。
甚至,在某些情况下,它在数据库中使用,但使用它的方法却不受欢迎。