当前位置:  开发笔记 > 编程语言 > 正文

备用UniqueId生成技术

如何解决《备用UniqueId生成技术》经验,为你挑选了1个好方法。

在应用程序中,当创建特殊类型的对象时,我需要为每个对象生成唯一ID.这些对象是在工厂中创建的,很有可能在"批量"操作中创建.我意识到框架中的"随机"毕竟不是那么"随机",所以我尝试将时间戳添加如下:

private string GenerateUniqueId()
{
    Random randomValue = new Random();
    return DateTime.Now.Ticks.ToString() + randomValue.Next().ToString();
}

不幸的是,即使这样也行不通.对于快速连续创建的对象,我生成相同的唯一ID :-(

目前,我正在以粗暴的方式实施如下:

private string GenerateUniqueId()
{
    Random randomValue = new Random();
    int value = randomValue.Next();
    Debug.WriteLine(value.ToString());
    Thread.Sleep(100);
    return DateTime.Now.Ticks.ToString() + value.ToString();
}

由于这不是一个非常大的应用程序,我认为一个简单快速的技术就足够了,而不是实现一个复杂的算法.

请建议.



1> LukeH..:

一个GUID可能是你在找什么:

private string GenerateUniqueId()
{
    return Guid.NewGuid().ToString("N");
}

如果你想要一个更小,更易于管理的ID,那么你可以使用这样的东西:

private string GenerateUniqueId()
{
    using (var rng = new RNGCryptoServiceProvider())
    {
        // change the size of the array depending on your requirements
        var rndBytes = new byte[8];
        rng.GetBytes(rndBytes);
        return BitConverter.ToString(rndBytes).Replace("-", "");
    }
}

注意:与GUID的128位相比,这只会给你一个64位的数字,所以碰撞的可能性会更大.可能不是现实世界中的问题.如果这是一个问题,那么您可以增加byte数组的大小以生成更大的ID.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有