我正在寻找一种为本地创建的记录类生成唯一标识符的方法,然后以各种格式(XML,SQL等)保存
我见过人们使用DateTime和GetHashCode,但这似乎有助于根据样本大小重复标识符。
GUID有点矫枉过正,因为我不需要在全球范围内有任何独特(大)的东西。我也知道使用GUID和GetHashCode来减小尺寸,但重复也会出现在这里。
有人可以建议生成简单唯一标识符的最佳做法或方法吗?
答案 0 :(得分:5)
指导或增加反击。
Guid可以“从空中”生成,但占用更多空间
对于计数器,您需要将计数器存储在某处,如果使用线程,则需要使其成为线程安全的。但它的尺寸较小。
答案 1 :(得分:5)
实施自己的几乎总是错误的。小的唯一数字需要真正可靠地记录上次使用的号码。很难得到,硬盘崩溃,注册表偶尔会被破坏。你需要组织它,以便有一个单点的失败。类似于dbase的自动递增列。确保如果丢失了最后一个数字,也会完全丢失数据。这意味着,对于一个人来说,不应该有一种方法让用户复制数据而不复制最后一个数字的记录。或者您始终拥有所有数据的可靠副本,并可以从中恢复最后一个数字。很快。
您还很难确保数字以原子方式递增。刚开始你的程序的两个实例通常足以引起混乱。修复这个问题很棘手,你需要一个存储数字的独立仲裁程序。
然后有必要猜测从现在起10年或20年后会发生什么的负担。您的应用程序是否会扩展以满足当时的需求?那是非常罕见的,依靠机器越来越快就完成了。什么是本地唯一号码现在需要成为全球唯一号码。 非常对此有不同的要求。
不要乱用这个,16个字节什么都不是。使用Guid。
答案 2 :(得分:1)
GetHashCode
肯定不是是一个非常好的选择。
您希望标识符有多大?
如果你有持久存储来记住“最后生成的”标识符(例如数据库),那么每次只需增加一个数字就足够了。如果您没有持久存储,那么使用DateTime
来获取自某个固定日期以来的毫秒数也可以。这显然会限制你只能每毫秒生成一个标识符,但根据你的情况,这应该没问题。
如果您有多个进程同时生成标识符,则可以将时间戳与进程ID或其他内容组合以避免重复。