网站首页 > 文章精选 正文
1. 什么是 GUID?
GUID(Globally Unique Identifier,全局唯一标识符)是一种 128 位的数字,用于标识全局范围内唯一的对象。常用于数据库表中的主键、分布式系统中的唯一标识符、软件组件的标识等场景。
在 C# 中,System.Guid 类提供了对 GUID 的生成和操作支持。GUID 的主要特点包括:
- o 唯一性:理论上,生成的 GUID 是全局唯一的。
- o 固定长度:GUID 的长度为 128 位(16 字节)。
- o 多种格式:GUID 可以以多种格式输出,适应不同的使用场景。
从 .NET 9 开始的新特性:Guid V7
.NET 9 引入了基于时间戳和随机值的 Guid 版本 7(Guid V7),使其更适合关系型数据库。Guid V7 的值是顺序的,减少了数据库索引的碎片化,从而提高了性能。
Guid guid7 = Guid.CreateVersion7();
Console.WriteLine(guid7);
2. 如何生成 GUID?
2.1 使用Guid.NewGuid()
Guid.NewGuid() 是生成 GUID 的最常用方法:
using System;
Guid guid = Guid.NewGuid();
Console.WriteLine("生成的 GUID: " + guid);
// 示例输出: 3F2504E0-4F89-11D3-9A0C-0305E82C3301
2.2 从字符串转换为 GUID
可以通过 Guid.Parse 或 Guid.TryParse 将字符串转换为 GUID:
string guidString = "123e4567-e89b-12d3-a456-426614174000";
Guid guid = Guid.Parse(guidString);
Console.WriteLine(guid.ToString());
2.3 从字节数组创建 GUID
byte[] bytes = new byte[16];
Random random = new Random();
random.NextBytes(bytes);
Guid guid = new Guid(bytes);
Console.WriteLine(guid.ToString());
3. GUID 的格式化输出
GUID 支持多种格式化输出方式,可以通过 ToString 方法指定格式:
3.1 常见格式化选项
格式化选项描述示例输出D默认格式,带连字符的 32 个字符f368a3ad-d7df-4655-a41a-e610a6c7ae83N不带连字符的 32 个字符f368a3add7df4655a41ae610a6c7ae83B被大括号包围的 GUID{f368a3ad-d7df-4655-a41a-e610a6c7ae83}P被圆括号包围的 GUID(f368a3ad-d7df-4655-a41a-e610a6c7ae83)X十六进制格式,带大括号和逗号分隔{0xf368a3ad,0xd7df,0x4655,{0xa4,0x1a,...}}
3.2 示例
Guid guid = Guid.NewGuid();
Console.WriteLine("Default (D): " + guid.ToString("D"));
Console.WriteLine("No Dashes (N): " + guid.ToString("N"));
Console.WriteLine("Braces (B): " + guid.ToString("B"));
Console.WriteLine("Parentheses (P): " + guid.ToString("P"));
Console.WriteLine("Uppercase Hex (X): " + guid.ToString("X"));
运行结果:
Default (D): f368a3ad-d7df-4655-a41a-e610a6c7ae83
No Dashes (N): f368a3add7df4655a41ae610a6c7ae83
Braces (B): {f368a3ad-d7df-4655-a41a-e610a6c7ae83}
Parentheses (P): (f368a3ad-d7df-4655-a41a-e610a6c7ae83)
Uppercase Hex (X): {0xf368a3ad,0xd7df,0x4655,{0xa4,0x1a,...}}
3.3 全零 GUID
Guid.Empty 表示全零的 GUID:
Console.WriteLine(Guid.Empty);
// 输出: 00000000-0000-0000-0000-000000000000
4. GUID 的常见应用场景
- 1. 数据库主键
GUID 常用于分布式数据库的主键,避免 ID 冲突。Guid V7 的顺序特性进一步优化了数据库索引性能。 - 2. COM 组件标识
在 COM 编程中,GUID 用于标识接口和类。 - 3. 文件或资源标识
GUID 可用于为文件、资源或会话分配唯一标识符。 - 4. 分布式系统
在分布式系统中,GUID 是标识不同节点或对象的理想选择。
5. 为什么选择 Guid V7?
Guid V7 是 .NET 9 引入的新特性,解决了传统 GUID 的一些局限性:
- o 顺序性:基于时间戳的顺序特性,减少了数据库索引的碎片化。
- o 性能优化:在关系型数据库中插入和查询性能更高。
- o 兼容性:仍然是标准的 128 位 GUID,兼容现有系统。
默认创建:
它默认使用当前 UTC 时间
Guid guid7 = Guid.CreateVersion7();
Console.WriteLine("Guid V7: " + guid7);
//Guid V7: 0196321a-07a3-74b6-b7d1-516a9d5dc247
指定时间戳创建:
DateTimeOffset timestamp = DateTimeOffset.UtcNow;
Guid guid7WithTimestamp = Guid.CreateVersion7(timestamp);
Console.WriteLine(guid7WithTimestamp);
//01963219-b06e-7230-a9f6-2eba45fa94ef
6. 总结
GUID 是一种强大的工具,用于生成全局唯一标识符。在 C# 中,System.Guid 类提供了简单易用的接口来生成和格式化 GUID。随着 .NET 9 引入 Guid V7,GUID 的性能和适用性得到了进一步提升。
猜你喜欢
- 2025-05-22 一个基于C#开发的Excel转Json工具
- 2025-05-22 在C++中,如何避免出现Bug?
- 2025-05-22 C#内插字符串:一种让代码更美观的方式
- 2025-05-22 Google Docs 为代码块添加了14种新的编程语言支持
- 2025-05-22 Cobalt Strike 4.8 用户指南-第五节-获取初始访问
- 2025-05-22 C#语言编程案例-颜色码数制转换
- 2025-05-22 ASP.NET Core Web API 中的 JSON 修补程序
- 2025-05-22 C#知识|对象序列化与反序列化
- 2025-05-22 全网最全95道MongoDB面试题1万字详细解析
- 2025-05-22 透视CobaltStrike(二)—从CS到免杀框架Veil
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)