Можно ли создавать одинаковые направляющие - PullRequest
11 голосов
/ 28 февраля 2011

Возможно ли создать одинаковые направляющие в одном приложении

Guid id = Guid.NewGuid();

Ответы [ 6 ]

14 голосов
/ 28 февраля 2011

Технически, да.Созданный Guid выглядит, например, так:

26de36b7-76f5-4f17-8f9d-44eb429f151b

Это означает, что 32 символа могут быть буквой (26 вариантов) или цифрой (10 вариантов)

Это означает, что 36 позиций на позициюв общей сложности 36 ^ 32, что составляет ок.60 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000.

Это означает, что если вы создаете 2 000 000 000 000 000 000 000 000 000 000 000 000 000 направляющих каждую миллисекунду (что составляетневозможно), вы в среднем получите один и тот же гид, созданный дважды один раз, а все остальные гиды будут уникальными.

Так что на практике.Нет;)

9 голосов
/ 28 февраля 2011

Если вы спрашиваете, велик ли риск Guid.NewGuid() создания дублирующих направляющих, ответ - нет. Это взято из Википедии :

Значение GUID представляется в виде шестнадцатеричной строки из 32 символов, такой как {21EC2020-3AEA-1069-A2DD-08002B30309D}, и обычно сохраняется как 128-разрядное целое число. Общее количество уникальных ключей составляет 2128 или 3,4 × 1038 - примерно 2 триллиона на кубический миллиметр всего объема Земли. Это число настолько велико, что вероятность того, что одно и то же число будет сгенерировано дважды, чрезвычайно мала.

Если вы спрашиваете нас, как создать две дубликаты направляющих, то это ответ:

Guid g1 = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309D");
Guid g2 = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309D");
1 голос
/ 28 февраля 2011

теоретически возможный? Да

Practicaly? У вас больше шансов выиграть в лотерею 10 раз подряд, чем при создании двух одинаковых GUID, даже в одном приложении.

См. Простое доказательство того, что GUID не уникален

0 голосов
/ 24 сентября 2012

Я на самом деле только что это произошло. У меня была таблица базы данных, содержащая 7 предметов. Из моей программы я добавил новый экземпляр, используя Guid.NewGuid() в качестве идентификатора. Я получил DbUpdateException, говорящий мне, что идентификатор был идентичен существующему. Попробовал еще раз, работает нормально.

0 голосов
/ 28 февраля 2011

Guid.NewGuid () всегда будет создавать уникальный Guid по всему миру, а не только внутри одного приложения.

0 голосов
/ 28 февраля 2011

U в GUID означает Уникальный. ;-) Так что это не должно быть возможно.

...