Comment les GUID sont-ils générés en C #?
Question originale:
Comment le Guid génère son identifiant ?? Comment sera sa sortie Si j'utilise le code suivant: Guid g = Guid.NewGuid ();
Si le résultat sera la combinaison de chiffres et de lettres ou Les chiffres seuls seront là ???
Un .Net System.Guid
est juste un entier de 128 bits (16 octets). Les chiffres et les lettres n'ont rien à voir avec cela. Vous pouvez utiliser la méthode ToString () pour afficher différentes versions "lisibles par un humain" d'un Guid, qui comprennent les chiffres 0 à 9 et les lettres A à F (représentant les valeurs hexadécimales), mais vous ne pouvez décider de le générer.
Il existe un très bon article ici qui décrit la manière dont les GUID sont générés, et en particulier la raison pour laquelle une sous-chaîne d'un GUID n'est pas garantie comme étant unique.
Basiclly un GUID est généré en utilisant une combinaison de
Cependant, il ne s'agit que d'un algorithme particulier utilisé pour générer des GUID (bien que je crois que c'est celui utilisé par le framework .Net), et n'est pas celui utilisé par le framework .Net
L'algorithme est documenté ici sous la forme/ Identificateur global unique
Il existe également d'autres formes de GUID en plus de "16 octets aléatoires", comme indiqué dans le RFC. Certains produits Microsoft (SQL Server par exemple) peuvent éventuellement générer ces "GUID séquentiels" basés sur une combinaison de "l'adresse MAC de la première carte réseau du système + un compteur toujours croissant, en fonction de l'heure système".
Ces "GUID séquentiels" ont la propriété Nice d'ajouter systématiquement de nouveaux enregistrements à la "fin" d'une table de base de données lorsqu'ils sont utilisés comme clé primaire de base de données avec un index clusterisé. Cela permet d'éviter la fragmentation de l'index de base de données et les divisions de page.
Si des GUID aléatoires sont utilisés en tant que clés primaires de base de données avec des index en cluster, de nouveaux enregistrements seront insérés de manière aléatoire au "milieu" d'une table du point de vue de l'allocation physique, ce qui aboutit à une fragmentation de l'index et à la saturation partielle des pages de la base de données.
L’utilisation de GUID séquentiels vous permet toujours de générer des GUID de manière indépendante sur plusieurs systèmes et d’être certain qu’il n’y aura pas de collisions (propriété que vous n’obtenez pas en utilisant des entiers séquentiels en tant que clés primaires sans allouer des "plages" ou des valeurs initiales et des incréments différents à chaque système, qui est un cauchemar administratif dans les grandes applications distribuées).
Les bits du GUID se décomposent comme ceci:
Total de 128 bits.
Détails sur Wikipedia et MSDN .
En bref, un GUID est un entier aléatoire de 128 bits, mais nous les formons à l'aide de chiffres hexadécimaux pour qu'ils soient facilement lisibles (il s'agit du format 8-4-4-4-12 que vous voyez). . En ce qui concerne la façon dont il est généré, voir l’article lié à Wikipedia.