gpt4 book ai didi

c# - 备用 UniqueId 生成技术

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:32 27 4
gpt4 key购买 nike

在应用程序中,当创建特殊类型的对象时,我需要为它们中的每一个生成一个唯一标识。这些对象是通过工厂创建的,并且很有可能在“批量”操作中创建。我意识到框架中的“随机”毕竟不是那么“随机”,所以我尝试按如下方式附加时间戳:

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();
}

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

请提出建议。

最佳答案

A 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。

关于c# - 备用 UniqueId 生成技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/582473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com