当前位置: 首页 > news >正文

C# 生成有序Guid的几种方法

C# 生成有序Guid的几种方法

public sealed class SequentialGuid{//使用 Guid.NewGuid() 的字节重排/// <summary>/// 优点及适用场景:/// 1.系统只在应用层生成GUID,追求极致的插入性能和最低的索引碎片/// 2.系统并发量极高,需要最高的时间戳精度来避免冲突(因为使用系统滴答计数(Tick),精度为100纳秒)/// </summary>/// <param name="guidType"></param>/// <returns></returns>public static Guid Create(SequentialGuidType guidType = SequentialGuidType.SequentialAsString){var randomBytes = Guid.NewGuid().ToByteArray();var timeBytes = BitConverter.GetBytes(DateTime.UtcNow.Ticks);if (BitConverter.IsLittleEndian)Array.Reverse(timeBytes);byte[] sequentialBytes;switch (guidType){case SequentialGuidType.SequentialAsString:case SequentialGuidType.SequentialAsBinary:sequentialBytes = new byte[16];Buffer.BlockCopy(timeBytes, 2, sequentialBytes, 0, 6);Buffer.BlockCopy(randomBytes, 0, sequentialBytes, 6, 10);break;case SequentialGuidType.SequentialAtEnd:sequentialBytes = new byte[16];Buffer.BlockCopy(randomBytes, 0, sequentialBytes, 0, 10);Buffer.BlockCopy(timeBytes, 2, sequentialBytes, 10, 6);break;default:throw new ArgumentOutOfRangeException("guidType");}return new Guid(sequentialBytes);}public enum SequentialGuidType{SequentialAsString,SequentialAsBinary,SequentialAtEnd}//使用 Comb GUID 算法/// <summary>/// 优点及适用场景:/// 1.需要与SQL Server NEWSEQUENTIALID() 完全兼容和互操作/// 2.简单、稳定、社区接受度高    /// 3.精度较低(约3.33毫秒)。/// PS:建议使用此方案/// </summary>/// <returns></returns>public static Guid NewComb(){byte[] guidArray = Guid.NewGuid().ToByteArray();DateTime baseDate = new DateTime(1900, 1, 1);DateTime now = DateTime.Now;// 获取从基准时间到现在的毫秒数TimeSpan days = new TimeSpan(now.Ticks - baseDate.Ticks);TimeSpan msecs = now.TimeOfDay;// 转换为字节数组byte[] daysArray = BitConverter.GetBytes(days.Days);byte[] msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds / 3.333333));// 反转字节顺序,因为 .NET 是小端序if (BitConverter.IsLittleEndian){Array.Reverse(daysArray);Array.Reverse(msecsArray);}// 将时间部分复制到 GUID 中Buffer.BlockCopy(daysArray, daysArray.Length - 2, guidArray, guidArray.Length - 6, 2);Buffer.BlockCopy(msecsArray, msecsArray.Length - 4, guidArray, guidArray.Length - 4, 4);return new Guid(guidArray);}//使用 MassTransit 的有序 GUID/// <summary>/// NewId 转换为 GUID 可能不符合 RFC 4122 标准/// 高性能要求:选择 MassTransit NewId/// </summary>/// <returns></returns>public static Guid MassGenGuid(){return MassTransit.NewId.Next().ToGuid();// 或者直接使用 NewId 类型// Id = NewId.Next().ToString()
        }}

 

http://www.zskr.cn/news/46340.html

相关文章:

  • 2025年评价高的双胞胎婴儿车排名
  • 类对象作为输入参数
  • php版本的发QQ邮件
  • Excel处理控件Aspose.Cells教程:如何使用C#在Excel中添加、编辑和更新切片器
  • FastReport在线设计器2026.1版本发布,新增报表验证工具等
  • 2025年直流分流器直销厂家权威推荐榜单:分流器/车规分流器/储能分流器源头厂家精选
  • 基于Dify工作流,轻松构建会自我优化的测试智能体
  • js dom元素向上查找匹配元素
  • 2025年口碑好的pe贴体膜厂家推荐及采购指南
  • 2025年知名的盾构施工煤矿道岔最新TOP品牌厂家排行
  • 2025 年 11 月喷油加工厂家推荐排行榜,鼠标外壳,TWS蓝牙耳机,塑胶喷油,自动线喷油,UV喷油,肤感UV喷油加工公司精选
  • 2025 年 11 月酿酒设备厂家推荐排行榜,懒人自动蒸酒机,小型酒厂设备,大型成套酿酒设备,200斤1000斤全自动酿酒设备公司推荐
  • 实用指南:语义三角论对AI自然语言处理中深层语义分析的影响与启示
  • 2025年商用爆米花燃气炒锅供货厂家权威推荐榜单:燃气加热爆米花加工流水线/全自动燃气爆米花炒锅/全自动爆米花流水线源头厂家精选
  • vue3 页面导入某一个文件夹下的所有图片
  • 2025年知名的电伴热带厂家最新推荐排行榜
  • 2025 年 11 月膜结构厂家权威推荐榜单:膜结构车棚,景观膜结构,体育看台,污水池加盖,球场建造工程公司精选
  • GEO单细胞数据建立Seurat对象全过程与错误修复示例
  • ElasticSearch利用自定义normalizer实现keyword字段忽略大小写搜索
  • Claude交流
  • 2025基于ITIL流程的ITSM平台选型指南:选对工具,让ITIL价值真正落地
  • Ash Authentication令牌撤销逻辑漏洞分析
  • jenkins修改root账号执行
  • 逆向基础--C++ 存储类 (04)
  • 实用指南:新手上手:基于Rokid CXR-M和CXR-S SDK构建简易翻译助手
  • 2025年新疆租车公司权威推荐榜单:新疆自驾游租车/新疆租皮卡车/新疆租通勤班车服务公司精选
  • 2025年北京cppm面授培训机构权威推荐榜单:cppm课程培训/cppm认证报名/cppm认证培训源头机构精选
  • N-gram
  • 实用指南:前端性能优化?
  • 2025年云桌面公司排行榜