c# - 如何生成绝对唯一的 GUID?

标签 c#

有没有办法每次都生成 100% 的新 GUID 而不会在整个应用程序中发生冲突?

由于我无法在八小时内回答我的问题,所以我想出了解决方案:

internal static class GuidGenerator
{
    private static readonly HashSet<Guid> _guids = new HashSet<Guid>();

    internal static Guid GetOne()
    {
        Guid result;

        lock (_guids)
            while (!_guids.Add(result = Guid.NewGuid())) ;

        return result;
    }
    internal static void Utilize(Guid guid)
    {
        lock (_guids)
            _guids.Remove(guid);
    }
}

此代码是否解决了应用内的问题?

编辑:呃,它变得复杂了。线程安全扼杀了速度。

最佳答案

不,没有任何方法可以生成绝对唯一 GUID。只有 3.40282367 × 1038 可能的 GUID,因此当星系发生碰撞时,这些标识符也会发生碰撞。即使对于单个应用程序,它也取决于应用程序具有多少个 GUID。除非您的应用程序大于所有 Google 索引器的总和,否则您不必为此失眠。只需使用 Guid.NewGuid()

关于c# - 如何生成绝对唯一的 GUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7981190/

相关文章:

c# - 倍福: AddDeviceNotification

C# System.Diagnostics.ProcessStartInfo EnvironmentVariables 不区分大小写?

c# - 如何判断一个对象是否是实体模型的一部分?

c# 根据 mySQL Workbench 中的项目数添加新按钮

c# - 关于 async/await 的 MSDN 示例 - 我不能在 await 调用后到达断点吗?

c# - 字符串比较 null 和 empty 是否相等

c# - 并非所有路径都返回一个值。 - 可选返回?

使用 Windows API Code Pack Shell 扩展的 C# 应用程序不会关闭

c# - 在 WCF 客户端中传递的多个参数不起作用(即使包装了 WebMessageBodyStyle)

c# - 根据值更改 DataGridView 列的颜色