Quelles sont les chances d'obtenir un guide.NewGuid () en double? [dupliquer]

possibilité de dupliquer:

un guide est-il unique 100% du temps?

preuve Simple que GUID n'est pas unique

dans MSDN vous pouvez lire:

la chance que la valeur de la nouvelle Gide sera tous les zéros ou égale à toute autre Gide est très faible.

dites que vous avez une méthode qui va créer un fichier à chaque seconde, et vous utilisez la méthode Guid.NewGuid() pour nom de fichier, est-il possible d'obtenir le même Guid alors? Ou bien l'ordinateur local de garder la trace d'une certaine façon? Combien faible est la chance ?

27
demandé sur Community 2011-12-27 13:10:27

6 réponses

, Vous ne manquerez jamais de guid. La probabilité de les reproduire est très faible:

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

15
répondu Stefan H 2011-12-27 09:15:08

les chances d'obtenir deux guids identiques sont astronomiquement minces même si vous générez des guids aussi vite que vous le pouvez. (Faire, dire, des milliers de guid 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 temps, dans quelques milliers d'années, où nous allons coloniser la galaxie, notre population sera dans les billions, le nombre d'ordinateurs individuels intégrés partout sera le nombre dans les gazillions, et chacun de ces ordinateurs généreront des GUIDs à un rythme qui est impensable aujourd'hui, quand nous allons commencer à avoir des problèmes avec des guids en double surgissant de temps en temps dans les zones éloignées de la galaxie, et puis il sera comme 640k de mémoire encore et encore, DLL enfer encore et encore, bogue millenium à deux chiffres de l'année encore et encore, tous combinés.

le truc avec les GUIDs c'est qu'on ne veut pas qu'ils être énorme, parce qu'alors ils seraient gaspilleurs, donc quelqu'un a dû venir avec un certain nombre de bits qui est assez petit pour ne pas être trop gaspilleur et pourtant assez grand pour donner une garantie raisonnable contre les collisions. Donc, c'est un compromis technologique. Dans notre siècle 128 bits semblent être un bon compromis, mais avec presque certitude mathématique, il y aura un autre siècle où ce compromis ne sera plus si bon.

34
répondu Mike Nakis 2018-03-16 21:11:26

il y a toujours quelques minuscule chance de duplicata, mais les identificateurs uniques à l'échelle mondiale sont censés être juste cela: global unique ...pas unique à l'échelle du système, mais comme sur la planète terre unique.

je suppose que, théoriquement, vous avez une meilleure chance de dupliquer un UUID à travers plusieurs systèmes, que sur un seul système. Bien que L'OS ne va pas stocker chaque GUID qu'il génère, il utilise probablement certains données de départ basées sur le temps pour éviter les collisions en soi. Bien sûr, cela dépend de la mise en œuvre.

OH, et des chances...Eh bien il ya 3,4 x 10^38 disponibles, Wikipedia dit que vous êtes plus susceptible de se faire frapper par une météorite.

je vais aussi proposer une méthode alternative, le chemin .La méthode GetTempFileName() peut être utile, car elle offre une protection contre les collisions...bien qu'il ne puisse créez 65,535 noms de fichiers uniques avant de lancer une exception si les fichiers précédents ne sont pas supprimés .

sinon, ce n'est pas très difficile à faire:

string path;

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

} while (File.Exists(path));
9
répondu rfmodulator 2011-12-27 09:50:55

veuillez lire la question suivante pour obtenir des renseignements sur les collisions: est-ce que les collisions avec des guidages sont possibles?

en ce qui concerne la "une guid par seconde", les GUID générés prennent généralement en compte le temps, donc sur le même ordinateur, 0 chance de générer la même guid sauf si vous changez les paramètres de l'horloge interne

edit : apparemment la page wikipedia à propos de guids dit que le temps n'est pas obligatoire lors de la construction d'un guid donc je suppose que cela dépend de l'algorithme utilisé. Puisque nous parlons C# (sur les fenêtres?) c'est en fait un UUID qui fait inclure chronométrage dans certaines versions.

1
répondu samy 2017-05-23 12:10:39

vous allez certainement manquer d'espace disque ou brouiller le système de fichiers avant que les GUIDs entrent en collision. Juste gérer les erreurs lors de la création de fichiers gracieusement et vous serez amende.

0
répondu tenfour 2011-12-27 09:16:39

vous ne devriez pas vous soucier d'obtenir le GUID dupliqué quand vous le Créez chaque seconde. Vous pouvez vous référer à http://en.wikipedia.org/wiki/Universally_unique_identifier et lire la probabilité de double GUID.

-1
répondu Kangkan 2016-11-08 05:27:50