web-dev-qa-db-fra.com

Quelles sont les chances d'obtenir un doublon de Guid.NewGuid ()?

Duplicata possible:
n GUID unique est-il 100% du temps?
Preuve simple que GUID n'est pas unique

Dans MSDN, vous pouvez lire:

La probabilité que la valeur du nouveau Guid soit entièrement nulle ou égale à tout autre Guid est très faible.

Disons que vous avez une méthode qui va créer un fichier toutes les secondes, et que vous utilisez la méthode Guid.NewGuid() pour nom de fichier, est-il possible d'obtenir le même Guid alors? Ou l'ordinateur local gardera-t-il une trace d'une certaine manière? Quelle est la chance?

31
Niklas

Vous ne manqueriez jamais de guides. La probabilité de les dupliquer est TRÈS faible:

http://betterexplained.com/articles/the-quick-guide-to-guids/

19
Stefan H

Les chances d'obtenir deux guides identiques sont astronomiquement minces même si vous générez des guides aussi vite que possible. (Générer, disons, des milliers de guides par seconde dans le seul but de trouver un doublon.)

Bien sûr, si vous voulez mon avis, je crois qu'il y aura un moment, dans quelques milliers d'années à partir de maintenant, où nous coloniserons la galaxie, notre population sera dans les milliers de milliards, le nombre d'ordinateurs individuels intégrés partout comptera dans les gazillions, et chacun de ces ordinateurs générera des GUID à un rythme qui est impensable aujourd'hui, quand nous commencerons à avoir des ennuis avec des guides en double qui apparaissent de temps en temps dans des régions éloignées de la galaxie, puis ce sera comme 640k de mémoire encore une fois, DLL enfer encore une fois, bogue du millénaire à deux chiffres encore une fois, tous combinés.

Le problème avec les GUID, c'est que nous ne voulons pas qu'ils soient énormes, car ils seraient alors inutiles, donc quelqu'un devait trouver un certain nombre de bits suffisamment petits pour ne pas être trop inutiles et pourtant assez grands pour donner un garantie raisonnable contre les collisions. C'est donc un compromis technologique. Dans notre siècle, 128 bits semblent être un bon compromis, mais avec une certitude presque mathématique, il y aura un autre siècle où ce compromis ne sera plus aussi bon.

39
Mike Nakis

Il y a toujours quelques minuscules chances de doublons, mais les identifiants uniques globaux sont censés être exactement cela: globalement unique ... pas unique à l'échelle du système, mais comme dans la planète Terre unique.

Je suppose que, théoriquement, vous avez plus de chances de dupliquer un UUID sur plusieurs systèmes que sur un seul système. Bien que le système d'exploitation ne stocke pas chaque GUID qu'il génère, il utilise probablement des données de départ basées sur le temps pour éviter les collisions en soi. Bien sûr, cela dépend de l'implémentation.

Oh, et les chances ... eh bien, il y a 3,4 x 10 ^ 38 disponibles, Wikipedia dit que vous êtes plus susceptible d'être touché par une météorite.

Je proposerai également une méthode alternative, la méthode Path.GetTempFileName () mérite d'être étudiée, car elle est protégée contre les collisions ... bien qu'elle ne puisse créer que 65 535 noms de fichiers uniques avant de lancer un exception si les fichiers précédents ne sont pas supprimés.

A part ça, ce n'est pas très difficile à faire:

string path;

do
{
    path = Guid.NewGuid().ToString(); // Format as needed

} while (File.Exists(path));
10
rfmodulator

Veuillez lire la question suivante pour plus d'informations sur les collisions: Les collisions GUID sont-elles possibles?

Concernant le "un guid par seconde", les guides générés prennent généralement en compte le temps, donc sur le même ordinateur, 0 chance de générer le même guid sauf si vous modifiez les paramètres de l'horloge interne

edit : apparemment la page wikipedia à propos des guides dit que le temps n'est pas obligatoire lors de la construction d'un guide, donc je suppose que cela dépend de la algorithme utilisé. Puisque nous parlons C # (sur Windows?), Il s'agit en fait d'un UUID qui le fait inclut le timing dans certaines versions.

2
samy

Vous allez certainement manquer d'espace disque ou bloquer le système de fichiers avant que les GUID ne se heurtent. Gérez simplement les erreurs lors de la création de fichiers avec élégance et tout ira bien.

0
tenfour