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

Как С# генерирует GUID?

Как генерируются GUID в С#?

4b9b3361

Ответ 1

Оригинальный вопрос:

Как Guid генерирует его идентификатор? Как будет производиться если я использую следующий код Guid g = Guid.NewGuid();

Будет ли вывод представлять собой комбинацию чисел и букв или там будут только цифры;

A.Net System.Guid - это всего лишь 128-битное целое число (16 байт). Числа и буквы не имеют к этому никакого отношения. Вы можете использовать метод ToString() для просмотра различных "удобочитаемых" версий Guid, которые включают числа 0-9 и буквы AF (представляющие шестнадцатеричные значения), но все зависит от вас, как вы хотите вывести его.

Ответ 2

Существует действительно хорошая статья здесь, которая описывает, как генерируются GUID, и, в частности, почему подстрока guid не является гарантией быть уникальным.

Basiclly GUID генерируется с использованием комбинации

  • MAC-адрес машины, используемой для генерации GUID (поэтому идентификаторы GUID, сгенерированные на разных компьютерах, уникальны, если MAC-адреса не используются повторно)
  • Временная метка (поэтому идентификаторы GUID, сгенерированные в разное время на одном компьютере, уникальны)
  • Дополнительные "биты экстренного уникального идентификатора" (они используются, чтобы гарантировать, что GUID, сгенерированные почти в одно и то же время на одном компьютере, уникальны)
  • Идентификатор алгоритма (так что GUID, сгенерированные с помощью другого алгоритма, уникальны)

Однако это всего лишь один конкретный алгоритм, используемый для генерации GUID (хотя я считаю, что тот, который используется инфраструктурой .Net), и не тот, который используется инфраструктурой .Net

Ответ 4

Существуют также другие формы GUID, помимо "случайных 16 байтов", как указано в RFC. Некоторые продукты Microsoft (например, SQL Server) могут дополнительно генерировать эти "последовательные GUID", которые основаны на комбинации "MAC-адрес первой сетевой карты в системе + постоянно увеличивающийся счетчик на основе системного времени".

Эти "последовательные GUID" имеют приятное свойство всегда добавлять новые записи в "конец" таблицы базы данных при использовании в качестве первичного ключа базы данных с кластерным индексом. Это помогает предотвратить фрагментацию индекса базы данных и разбиение страниц.

Если случайные GUID используются как первичные ключи базы данных с кластеризованными индексами, новые записи будут помещены случайным образом в "середине" таблицы с точки зрения физического распределения, что приведет к фрагментации индекса и частично заполненным страницам базы данных с течением времени.

Использование последовательных GUID по-прежнему позволяет создавать GUID самостоятельно на нескольких системах и быть уверенным, что не будет никаких коллизий (свойство, которое вы не получаете, используя последовательные целые числа в качестве первичных ключей, не выделяя "диапазоны" или разные семена и приращения каждая система, которая является административным кошмаром в больших распределенных приложениях).

Ответ 5

Подробности Wikipedia и MSDN.

Короче говоря, GUID представляет собой случайное 128-битное целое число, но мы отформатируем их с использованием шестнадцатеричных цифр, чтобы они были легко читаемыми (это формат 8-4-4-4-12, который вы видите). Что касается его создания, см. Связанную статью в Википедии.

Ответ 6

Биты GUID разбиваются следующим образом:

  • 60 бит метки времени
  • 48 бит идентификатора компьютера
  • 14 бит uniquifier
  • Исправлено 6 бит

Всего 128 бит.

Ответ 7

A Guid - это уникальный номер, который имеет миллиарды перестановок и состоит из смеси шестнадцатеричных чисел и чисел в группах. И он создается на основе различных факторов, таких как время, версия Windows, системные ресурсы, такие как жесткие диски, материнские платы, устройства и т.д. Гид гарантированно будет уникальным. (Спасибо, ck!) Я не видел примера, где вы делаете

Guid g = new Guid.NewGuid();
Guid g = Guid.NewGuid(); /* Thanks Dave! */

где g будет иметь одинаковое значение в последовательных прогонах.

Он чаще используется для мьютексов, примером может быть создание одного экземпляра приложения и использование мьютекса с директором гарантирует время жизни экземпляра приложения.

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