Comment est-ce que C# générer des Guid?
Comment sont Guid généré en C#?
- Vote pour le fermer comme un double de Comment sont .NET 4 Guid généré?. Je suppose que ce n'est pas une duplication parfaite, en principe, d'autant plus que maintenant .NET de Base existe, et il est difficile de savoir si la réponse à la dupe est vrai .NET de Base sur la non-Os Windows), mais pour l'instant, cette question n'a pas une réponse qui vient même près d'être correcte et le lien dupe ne.
- Je suis d'accord que ce n'est pas une réponse qui est proche d'être correct. Tous ceux qui arrivent ici pour vraiment utile d'informations, veuillez consulter stackoverflow.com/a/2757969/1739000
- Ni est un doublon. Cette question a été posée de 6 mois plus tôt que l'un de vous de la référence et l'autre est spécifique à la version 4. Comment sont .NET 4 Guid généré? a des réponses solides, mais il faut vraiment tenir compte de RFC 4122 pour obtenir l'image complète.
- "Cette question a été posée de 6 mois plus tôt" - c'est vrai, mais sans importance. Il est parfaitement légitime pour fermer une ancienne question comme un doublon d'un autre plus récent. Nous devrions avant tout considérer ce qui est le plus utile pour un sauveteur, à la fin, jusqu'au moment de décider de la fermeture de la direction; l'âge n'a pas d'importance.
- Alors que je trouve votre réponse raisonnable, je voulais exercer un montant adéquat de scepticisme et trouvé cette réponse en accord avec la vôtre ainsi que des articles dans la section d'Aide qui pointent vers le même sentiment. Sur cette note, je vais aussi voter cela comme une dupe. 😉
Vous devez vous connecter pour publier un commentaire.
Question d'origine:
Un .Net
System.Guid
est juste un nombre entier 128 bits (16 octets). Les chiffres et les lettres n'ont rien à faire avec elle. Vous pouvez utiliser la méthode ToString() pour voir les différents "lisible" versions d'un Guid, qui comprennent des nombres de 0 à 9 et lettres de A à F (représentant les valeurs en hexadécimal), mais c'est à vous de décider comment vous voulez de sortie.Il y a un très bon article ici qui décrit comment les Guid sont générés, et en particulier pourquoi une sous-chaîne d'un guid n'est pas garantie d'être unique.
Basiclly un GUID est généré en utilisant une combinaison de
Cependant, ce n'est que de 1 en particulier de l'algorithme utilisé pour générer Guid
(bien que je crois que c'est celui utilisé par l' .Net framework), et n'est pas celui utilisé par l' .Net frameworkL'algorithme est décrite ici comme Identificateur global unique
Il y a aussi d'autres formes de GUID en plus "aléatoire 16 octets", comme indiqué dans la RFC. Certains produits Microsoft (SQL Server par exemple) peut éventuellement générer ces "séquentiel Guid" qui sont basées sur une combinaison de "adresse MAC de la première carte réseau dans le système + croissant compteur basé sur l'heure du système".
Ces "séquentiel Guid" ont la belle propriété de toujours en ajoutant de nouveaux enregistrements à la "fin" d'une table de base de données lorsqu'il est utilisé comme une base de données clé primaire avec un index cluster. Cela permet d'éviter la fragmentation des index de la base de données et la page se divise.
Si aléatoire Guid sont utilisés comme base de données de clés primaires avec les index en cluster, de nouveaux enregistrements seront insérés au hasard dans le "milieu" d'une table à partir d'une distribution physique point de vue, ce qui conduit à la fragmentation de l'index et partiellement pleines pages de base de données au fil du temps.
À l'aide séquentielle Guid vous permet toujours de générer des Guid indépendamment sur plusieurs systèmes et être confiant, il n'y aura pas de collisions (une propriété que vous n'obtenez pas l'aide séquentielle des entiers comme clés primaires sans lui, les "fourchettes" ou de graines différentes et s'incrémente à chaque système, ce qui est un cauchemar administratif dans les grandes applications distribuées).
Détails sur Wikipédia et MSDN.
En bref, un GUID est un aléatoire de 128 bits entier, mais nous formater à l'aide de chiffres hexadécimaux, de sorte qu'ils sont facilement lisibles (c'est le 8-4-4-4-12 format que vous voyez). Aussi loin que la façon dont son généré, voir le liés article de Wikipédia.
Les bits du GUID, se répartissent comme suit:
Total de 128 bits.
Guid.NewGuid
sur Windows, comme indiqué dans le stackoverflow.com/a/2757969/1709587. En effet, il y a de bonnes raisons de confidentialité pour toutes les langues/Esp/cadres pour éviter le GUID-algorithme de génération que vous décrivez ici (ou au moins de ne pas l'utiliser en tant que par défaut), comme le condamné David L. Smith pourriez vous expliquer.Un Guid est un numéro unique qui a des milliards de permutations et est composé d'un mélange de hexadécimale et les numéros des groupes. Et il est généré en fonction de différents facteurs, tels que l'heure, la version de windows, système de ressources tels que les disques durs, cartes mères, des dispositifs et ainsi de suite.
Un Guid est garanti d'être unique.(Merci ck!) Je n'ai pas vu un cas où vous neoù
g
aura la même valeur dans des séries successives.Il est plus communément utilisé pour les mutex, un exemple serait de créer une seule instance d'une application et à l'aide d'un mutex avec un guid garantit la durée de vie de l'instance de l'application.
Même, dans certains cas, il est utilisé dans la base de données, mais la méthode d'utilisation il est mal vu.