首页 > 解决方案 > 可以使用 DateTime.Now 的 Ticks 生成重复的唯一标识符吗?

问题描述

此代码是否有可能生成相同的身份,

for (int i = 0; i < 20; i++)
    {
        string TransID = DateTime.Now.Ticks.ToString();
    }

导致这种情况发生的考虑因素是什么?

标签: c#performancedatetimefor-loopuniqueidentifier

解决方案


是的,此代码可以生成相同的标识符。

无论刻度精度如何,如果系统日期在 Windows 和/或 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

GUID 转换和比较与字符串比较的成本是多少


推荐阅读