Подтвердить что ты не робот

Каковы шансы получить дубликат Guid.NewGuid()?

Возможный дубликат:
Является ли GUID уникальным в 100% случаев? Простое доказательство того, что GUID не уникален

В MSDN вы можете прочитать:

Вероятность того, что значение нового Guid будет равна всем нулям или равна любому другому Guid, очень низка.

Скажите, что у вас есть метод, который будет создавать файл каждую секунду, и вы используете метод Guid.NewGuid() для имени файла, возможно ли получить тот же Guid? Или локальный компьютер будет отслеживать в некотором роде? Насколько низкий шанс?

4b9b3361

Ответ 2

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

Конечно, если вы хотите мое мнение, я верю, что через пару тысяч лет, когда мы будем колонизировать галактику, наше население будет в триллионах, а число из отдельных компьютеров, встроенных повсюду, будет числиться в gazillions, когда мы начнем сталкиваться с проблемами с появлением повторяющихся подсказок каждый раз в отдаленных районах галактики, а затем это будет как 640 тыс. памяти снова, DLL-ад снова и снова, двузначная ошибка тысячелетия заново, все из них объединены.

Вещь с идентификаторами GUID заключается в том, что мы не хотим, чтобы они были огромными, потому что тогда они были бы расточительными, поэтому кто-то должен был придумать несколько бит, достаточно маленький, чтобы не быть слишком расточительным и все же достаточно большим дать разумную гарантию от столкновений. Таким образом, это технологический компромисс. В нашем столетии 128 бит кажутся хорошим компромиссом, но с почти математической уверенностью будет еще один век, когда этот компромисс не будет таким хорошим.

Ответ 3

Всегда существует некоторая минимальная вероятность дублирования, но глобально уникальные идентификаторы предназначены только для того, чтобы: глобально уникальный... не общесистемный уникальный, но как в планете Земля уникальной.

Я предполагаю, что теоретически у вас есть больше шансов дублировать UUID в нескольких системах, чем на одной системе. Хотя ОС не собирается хранить каждый идентификатор GUID, который он генерирует, он, вероятно, использует некоторые временные данные семян во избежание коллизий сам по себе. Конечно, это зависит от реализации.

О, и шансы... ну есть 3,4 x 10 ^ 38, Wikipedia говорит, что вы, скорее всего, получите пораженный метеоритом.

Я также предлагаю альтернативный метод, метод

Ответ 4

Пожалуйста, прочитайте следующий вопрос для информации о столкновениях: Возможны ли конфликты GUID?

Что касается "одного указателя в секунду", генерируемые подсказки обычно учитывают время, поэтому на том же компьютере 0 шанс генерировать один и тот же указатель, если вы не измените настройки внутренних часов

изменить: по-видимому страница wikipedia о подсказках говорит, что время не является обязательным при построении guid так я предположим, это зависит от используемого алгоритма. Поскольку мы говорим о С# (на окнах?), Это фактически UUID, который включает в себя время в некоторых версиях.

Ответ 5

У вас наверняка закончится дисковое пространство или затормозит файловую систему до столкновения GUID. Просто обрабатывайте ошибки при создании файлов изящно, и все будет в порядке.

Ответ 6

Вы не должны беспокоиться о том, чтобы получать дубликат GUID, когда вы его создаете каждую секунду. Вы можете обратиться к http://en.wikipedia.org/wiki/Universally_unique_identifier и прочитать вероятность дублирования GUID.