GUID概念



GUID概念

GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。 GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。

在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项、类及接口标识、数据库、系统目录等对象

GUID格式

GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。

GUID特点

★GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。 ★世界上的任何两台计算机都不会生成重复的 GUID 值。★需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。 ★GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。

GUID生成算法

网上流传,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。有待验证。

GUID例子

1.注册表,GUIDs被用于整个Windows环境。当你在一个Windows系统中仔细阅读注册表时,你可以看到GUIDs被广泛用于唯一识别程序。特别地,它们作为程序的Ids集中在HKEY_CLASSES_ROOT部分(AppID键)。

2.C#,Sqlserver的唯一表示,当基于web的应用程序,并发量很大的情况下,并发访问上千以上时,在数据中,使用 int id identiy(1,1),出现相同的概率会大,GUID,就有所改善。

class Program
    {
        // Guid for the interface IMyInterface.
        [Guid("F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4")]
        interface IMyInterface
        {
            void MyMethod();
        }

        // Guid for the coclass MyTestClass.
        [Guid("936DA01F-9ABD-4d9d-80C7-02AF85C822A8")]
        public class MyTestClass : IMyInterface
        {
            // Run regasm on this assembly to create .reg and .tlb files.
            // Reg file can be used to register this coclass in the registry.
            // Tlb file will be used to do interop.

            public void MyMethod() { }

            public static void Main(string[] args)
            {
                // Example addresses the following in System.Runtime.InterOpServices.GuidAttribute.
                // How to specify the attribute on interface/coclass.
                // Retrieve the GuidAttribute from an interface/coclass.
                // Value property on GuidAttribute class.

                // Example addresses the following in System.Guid.
                // Constructor Guid(string).
                // Constructor Guid(ByteArray).
                // Equals.
                // Operator ==.
                // CompareTo.

                Attribute IMyInterfaceAttribute = Attribute.GetCustomAttribute(typeof(IMyInterface), typeof(GuidAttribute));

                // The Value property of GuidAttribute returns a string.
                System.Console.WriteLine("IMyInterface Attribute: " + ((GuidAttribute)IMyInterfaceAttribute).Value);

                // Using the string to create a guid.
                Guid myGuid1 = new Guid(((GuidAttribute)IMyInterfaceAttribute).Value);
                // Using a byte array to create a guid.
                Guid myGuid2 = new Guid(myGuid1.ToByteArray());

                // Equals is overridden and so value comparison is done though references are different.
                if (myGuid1.Equals(myGuid2))
                    System.Console.WriteLine("myGuid1 equals myGuid2");
                else
                    System.Console.WriteLine("myGuid1 not equals myGuid2");

                // Equality operator can also be used to determine if two guids have same value.
                if (myGuid1 == myGuid2)
                    System.Console.WriteLine("myGuid1 == myGuid2");
                else
                    System.Console.WriteLine("myGuid1 != myGuid2");

                // CompareTo returns 0 if the guids have same value.
                if (myGuid1.CompareTo(myGuid2) == 0)
                    System.Console.WriteLine("myGuid1 compares to myGuid2");
                else
                    System.Console.WriteLine("myGuid1 does not compare to myGuid2");

                System.Console.ReadLine();

                //Output.
                //IMyInterface Attribute: F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
                //myGuid1 equals myGuid2
                //myGuid1 == myGuid2
                //myGuid1 compares to myGuid2

                //GENERATE GUIDS
                //for (int i = 0; i <100; i++)
                //{
                //    Console.WriteLine(System.Guid.NewGuid().ToString());
                //}

                //Console.ReadLine();

            }

        }

}

GUID概念

时间: 2024-11-08 19:09:52

GUID概念的相关文章

全球唯一标识GUID

一.GUID概念 GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性.GUID 主要用于在拥有多个节点.多台计算机的网络或系统中,分配必须具有唯一性的标识符. 在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项.类及接口标识.数据库.系统目录等对象. 二.GUI

COM组件设计与应用(二)——GUID和接口

本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8884.html 一.前言 书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了.那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数据的时候,它该如何启动 Excel 呢?启动后,又如何让 Excel 自己去读入.解析.显示 xls 数据呢? 二.CLSID 概念 有一个非常简单的解决方案,那就是

PCI/PCIe接口卡Windows驱动程序(2)-开发者需要了解的WDF中的一些重要的概念

本科毕业设计是这方面的工作,所以想开几篇博客来介绍使用WDF开发PCI/PCIe接口卡的驱动程序方法. 在上一篇简要介绍了WDF和开发环境搭建后,本篇将讲述几个WDF中的概念,对开发者了解WDF非常有帮助,属于“内功部分”: 本篇文章结构将没那么清晰,当句句都是作者通过看书.看论文.看MSDN提炼出来的,希望对读者能够有所帮助. 1.WinDBG是唯一的内核驱动调试利器,但是开发PCIe的WDF驱动可以采用“黑盒”方式,所以windbg不是必须的: 2.WDF比WDM好,别再用WDM了: 3.驱

C#中唯一标识符GUID的一些知识点

概念 GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性.GUID 主要用于在拥有多个节点.多台计算机的网络或系统中,分配必须具有唯一性的标识符. 在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项.类及接口标识.数据库.系统目录等对象. 格式 GUID 的格式

项目问题总结2:GUID区分大写和小写吗?

问题描写叙述: 近期在做项目的过程中,遇到一个问题,将从基础系统查询出来的课程ID作为參数去考评系统里查询考试信息,却什么也查不出来,调试了半天不知道什么原因. 问题分析: 静下心来思考一下,能够肯定程序代码逻辑以及实现是没有问题的,因此就是数据的问题了.那么数据出问题就应该是数据库的问题了,在进行单步调试的过程中.去检查各个变量以及參数的值,最终找到了问题出在哪里.先来看看两个系统的数据库存储CourseId的数据类型是什么吧,例如以下图: 上图中左边是基础的.右边是考试的.再来看看我的代码是

项目问题总结2:GUID区分大小写吗?

问题描述: 最近在做项目的过程中,遇到一个问题,将从基础系统查询出来的课程ID作为参数去考评系统里查询考试信息,却什么也查不出来,调试了半天不知道什么原因. 问题分析: 静下心来思考一下,可以肯定程序代码逻辑以及实现是没有问题的,因此就是数据的问题了.那么数据出问题就应该是数据库的问题了,在进行单步调试的过程中,去检查各个变量以及参数的值,终于找到了问题出在哪里,先来看看两个系统的数据库存储CourseId的数据类型是什么吧,如下图: 上图中左边是基础的,右边是考试的.再来看看我的代码是如何实现

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析 下图描述了扩展事件中引入的几个新概念: 事件 事件是指代码中定义的点.此类示例包括:T-SQL 语句完成执行时的点或结束获取锁定时的点.每个事件都有一个定义的负载(该事件返回的列的集合),它是使用 ETW 模型(其中每个事件都返回一个通道和关键字作为负载的一部分)来定义的,以便能够与 ETW 集成.SQL Server 2008 最初提供 254 个定义的事件,预计在今后还会增加. 使用下列代码可以查看这些定义

UNIX高级环境编程(13)信号 - 概念、signal函数、可重入函数

信号就是软中断. 信号提供了异步处理事件的一种方式.例如,用户在终端按下结束进程键,使一个进程提前终止. ? 1 信号的概念 每一个信号都有一个名字,它们的名字都以SIG打头.例如,每当进程调用了abort函数时,都会产生一个SIGABRT信号. 每一个信号对应一个正整数,定义在头文件<signal.h>中. 没有信号对应整数0,kill函数使用信号编号0表示一种特殊情况,所以信号编号0又叫做空信号(null signal). 下面的各种情况会产生一个信号: 当用户在终端按下特定的键时,会产生

linux入门基础_centos(一)--基础命令和概念

闲来无事干,看看2014自己整理的一些学习笔记.独乐了不如众乐乐吗! 贴出来和大家分享一下,由于篇幅比较长,分成几篇发布吧,由于是学习笔记,可能有些地方写的不是很正确或者说不详细,或者你会看到上面的课时有点不连续,因为学习笔记吗,我只是记录一下自己认为需要记录的.大家有什么随意喷,本人只有一个能拿得出去的有点:脸皮厚,哈哈....好了,走起 课时3:命令行BASH的基本操作     1.提示符 #:表示根用户即ROOT用户 $:表示普通用户 ***注意*** 进入Terminal命令行, ***