使用 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