Может ли это вызвать несколько идентичных идентификаторов GUID? - PullRequest
8 голосов
/ 09 июня 2010

Поскольку генерация GUID зависит от времени, если System.Guid.NewGuid () вызывается несколько раз в один и тот же момент в разных потоках, может ли она вернуть идентичные GUID?

Ответы [ 4 ]

7 голосов
/ 10 июня 2010

В Windows GUID (UUID) создаются из криптографического генератора случайных чисел с UuidCreate .Это UUID версии 4 в терминах RFC 4122 .Никаких временных меток или сетевых карт не требуется, если только вы не используете GUID старой школы версии 1, созданные с помощью UuidCreateSequential .

См. Также Насколько случайным является System.Guid.NewGuid ()?(Взять два)

5 голосов
/ 09 июня 2010

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

Это не означает, что существует видимыйчасть Guid, в которой вы можете видеть приращения для каждого вызова.

0 голосов
/ 09 июня 2010

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

0 голосов
/ 09 июня 2010

Функция NEWID Transact-SQL, а также функции и методы API приложения генерируют новые значения уникального идентификатора из идентификационного номера их сетевой карты плюс уникальный номер из тактовой частоты процессора. Каждая сетевая карта имеет уникальный идентификационный номер. Значение uniqueidentifier, возвращаемое NEWID, генерируется с помощью сетевой карты на сервере. Значение uniqueidentifier, возвращаемое функциями и методами API приложения, создается с помощью сетевой карты на клиенте.

. Он не будет генерировать дубликаты во времени или на любом компьютере согласно msdn .

...