C#基于当前时间,获取唯一识别号(ID)的方法

在软件开发里,我们常常要区别各个类似的对象,比如批量生成的多个变量,多个标注等等。在PLC-Recorder开发的过程中,ID号的生成方法也经过了多次优化,才终于稳定下来,能够基于当前时间,生成不重复的ID号(突发需要量不是很大时有效),分享给大家,让朋友们也少走些弯路。

1、基于当前时间

由于软件可能会重启,因此,将历史的ID都记录下来,将是个非常大的负担。因此,基于当前时间进行ID生成,能避免与历史上ID的冲突。

Int64 ID = DateTime.Now.Ticks;

2、发现ID号的重复

仅用上述语句生成ID号是不够的,因为,批量生成时,他们是相同的,因此,需要查重。

将有效的ID存入字典,可以快速查重。程序自己生成ID后,会立即存入字典。如果是其他程序生成的,要注意也存入字典。

当然,用嘻哈表可能更简单,大家可以改进,我这边生成ID的动作不频繁,所以,无所谓。

3、发现重复时的处理

如果发现重复了,则将ID++,直到找到不重复的。然后将新的ID存入字典,并反馈出去。

        /// <summary>
        /// 采用字典方式
        /// </summary>
        /// <returns>新ID</returns>
        public static Int64 IDGetNew()
        {
            //确认ID不重复
            Int64 ID = DateTime.Now.Ticks;
            while (LibID.ContainsKey(ID))
            {
                ID++;//获得一个新的ID
            }
            LibID.Add(ID, ID);
            
            return ID;
        }
        public static void IDAdd(long ID)
        {
            if (LibID.ContainsKey(ID)) return;
            LibID.Add(ID, ID);
        }
        private static Dictionary<long, long> LibID = new Dictionary<long, long>();

2022年6月30日

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值