使用 DateTime.Now 的 Ticks 可以生成重复的唯一标识符吗?
Can using Ticks of DateTime.Now can generate duplicates unique identifiers?
此代码是否有可能生成相同的身份,
for (int i = 0; i < 20; i++)
{
string TransID = DateTime.Now.Ticks.ToString();
}
发生这种情况的考虑因素是什么?
首先,让我们定义一下什么是即时报价。一个滴答声表示一百纳秒或百万分之一秒。
1 second = 10 million ticks
基本上,如果您不同时生成两个 ID,就可以了。
此外,我建议您观看 GUID 作为替代。这取决于您要完成的任务。
这段代码
for (int i = 0; i < 20; i++)
{
string TransID = DateTime.Now.Ticks.ToString();
}
不会在每秒执行超过 1000 万次 for 循环的计算机上生成唯一的 TransID。
是的,这段代码可以生成相同的标识符。
无论刻度精度如何,只要在 Windows and/or Bios 中更改系统日期即可。
并且如果它是 运行 在不同时区的计算机或如果您旅行。
后一种情况意味着你绝对不应该使用这样的代码,即使是在本地和未连接的应用程序中也是如此。
如果您需要个人和本地应用程序的 ID,并且您从不旅行,此代码可以满足您的需求,但不建议使用这种糟糕的模式。
正如大家所说,没有错,你应该使用 Guid.New()
这实际上是最安全的标准,或者 int 或 long 自动递增(对于本地或由服务器管理)以获得更好的性能在某些情况下。
https://docs.microsoft.com/dotnet/api/system.datetime.now
https://en.wikipedia.org/wiki/Unique_identifier
https://en.wikipedia.org/wiki/Universally_unique_identifier
How expensive is a GUID cast and comparison vs a string comparison
此代码是否有可能生成相同的身份,
for (int i = 0; i < 20; i++)
{
string TransID = DateTime.Now.Ticks.ToString();
}
发生这种情况的考虑因素是什么?
首先,让我们定义一下什么是即时报价。一个滴答声表示一百纳秒或百万分之一秒。
1 second = 10 million ticks
基本上,如果您不同时生成两个 ID,就可以了。
此外,我建议您观看 GUID 作为替代。这取决于您要完成的任务。
这段代码
for (int i = 0; i < 20; i++)
{
string TransID = DateTime.Now.Ticks.ToString();
}
不会在每秒执行超过 1000 万次 for 循环的计算机上生成唯一的 TransID。
是的,这段代码可以生成相同的标识符。
无论刻度精度如何,只要在 Windows and/or Bios 中更改系统日期即可。
并且如果它是 运行 在不同时区的计算机或如果您旅行。
后一种情况意味着你绝对不应该使用这样的代码,即使是在本地和未连接的应用程序中也是如此。
如果您需要个人和本地应用程序的 ID,并且您从不旅行,此代码可以满足您的需求,但不建议使用这种糟糕的模式。
正如大家所说,没有错,你应该使用 Guid.New()
这实际上是最安全的标准,或者 int 或 long 自动递增(对于本地或由服务器管理)以获得更好的性能在某些情况下。
https://docs.microsoft.com/dotnet/api/system.datetime.now
https://en.wikipedia.org/wiki/Unique_identifier
https://en.wikipedia.org/wiki/Universally_unique_identifier
How expensive is a GUID cast and comparison vs a string comparison