当然不要忘记,官网才是最好的老师:docs.microsoft.com/zh-cn/dotnet/core/
沙盒学习指南: 免费环境docs.microsoft.com/zh-cn/learn/browse
posted @ 2020 初久的私房菜 推荐出品

C#中的 Guid 7

 

正文

介绍

GUID(全局唯一标识符)是 .NET 中用于确保分布式系统中唯一性的基本数据类型。随着 .NET 9 的推出,引入了一种新的 GUID 版本——版本 7,以解决现有 GUID 版本 4 的一些局限性。本文将探讨 GUID 版本 4 和版本 7 之间的区别、它们的使用场景,以及如何有效地使用它们。

Guid V4

创建 Guid V4

自 .NET 诞生以来,GUID 版本 4 一直是其核心组成部分。你可以使用 NewGuid() 方法创建一个新的 GUID,该方法根据 RFC 9562 中的 UUID 版本 4 规范生成随机 GUID。

示例:


Console.WriteLine(guid);
// 输出:ee9d5db0-33cb-4408-ba9c-71289a823ba5

Guid V4 的局限性

尽管 GUID 版本 4 确保了全局唯一性,但它也有一些缺点,尤其是在关系型数据库中:

  • 非顺序性:GUID 版本 4 的值是随机的,会导致索引碎片化。随着时间的推移,新行被随机插入到索引中的不同位置,可能会导致性能下降。
  • 索引碎片化:频繁的页面拆分和碎片化的索引会导致存储使用效率低下,查询性能变慢。

Guid V7

创建 Guid V7

.NET 9 引入了基于时间戳和随机值的 GUID 版本 7,使其更适合关系型数据库。你可以使用 CreateVersion7() 方法创建一个 GUID 版本 7。

示例:


Console.WriteLine(guid7);
// 输出:01917ba0-a4b5-793b-a915-1caeceb5843e

Guid V7 的优势

  • 顺序性:GUID 版本 7 的值是顺序的,减少了关系型数据库中的索引碎片化,提高了性能。
  • 性能提升:顺序 GUID 最小化了页面拆分,保持了更有序的索引结构,从而随着时间的推移提高了性能。
  • 灵活性:在创建新的 GUID 时,你可以传递一个 DateTimeOffset 来控制时间戳。

示例,使用特定时间戳创建 GUID:

比较 Guid V4 和 Guid V7

以下是创建五个不同版本的 GUID 的比较:

示例:

{
    var guid = Guid.NewGuid();

    Console.WriteLine($"V{guid.Version}: {guid}");
}
Console.WriteLine();
for (int i = 0; i < 5; i++)
{
    var guid = Guid.CreateVersion7();

    Console.WriteLine($"V{guid.Version}: {guid}");
}

输出:

V4: 0557b321-abcf-4390-abee-4b8fbf93ff34
V4: 21a98165-af1e-477e-9dee-7eb9c79e6c77
V4: 7dbbf973-c55a-4917-87a5-95c16f356262
V4: b13892f2-334f-409a-b9de-d90dea21eed4
V4: 52dc44f7-76e0-4689-a5e6-1a0f1c5f37a3
V7: 01917bbe-d973-7beb-a813-106fcb4eff98
V7: 01917bbe-d973-703c-8365-b7596740ac82
V7: 01917bbe-d973-7234-a580-5f07730a3ad7
V7: 01917bbe-d973-7751-b8ba-bb73afab4a5d
V7: 01917bbe-d973-7d36-9be0-2e6317919153

在实践中使用 Guid V7

在以下场景中,GUID 版本 7 特别有用:

  • 你需要确保在分布式系统中实现全局唯一性。
  • 你希望在关系型数据库中最小化索引碎片化。
  • 你需要提升插入操作的性能。

总结

.NET 9 中引入的 GUID 版本 7 在性能和关系型数据库中的索引管理方面提供了显著改进,优于 GUID 版本 4。通过了解 GUID 版本 7 的不同之处和优势,开发人员可以更有根据地决定在其应用程序中使用哪种 GUID 版本。无论你是在处理分布式系统还是优化数据库性能,GUID 版本 7 都是一个确保唯一性和效率的强大工具。

posted @   初久的私房菜  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
历史上的今天:
2023-02-21 .Net6 + GraphQL + MongoDb拦截器
2022-02-21 关于Code Review
2022-02-21 使用 dotnet watch 时包含 CSHTML 文件
2022-02-21 记一次公司项目缓存击穿
2022-02-21 C# 9 特性二
2022-02-21 C# 9 特性三
作者:初久的私房菜
好好学习,天天向上
返回顶部小火箭
好友榜:
如果愿意,把你的博客地址放这里
张弛:https://blog.zhangchi.fun/
点击右上角即可分享
微信分享提示