Как генерируются GUID в С#?
Как С# генерирует GUID?
Ответ 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
Ответ 3
Алгоритм описан здесь как Глобально уникальный идентификатор
Ответ 4
Существуют также другие формы GUID, помимо "случайных 16 байтов", как указано в RFC. Некоторые продукты Microsoft (например, SQL Server) могут дополнительно генерировать эти "последовательные GUID", которые основаны на комбинации "MAC-адрес первой сетевой карты в системе + постоянно увеличивающийся счетчик на основе системного времени".
Эти "последовательные GUID" имеют приятное свойство всегда добавлять новые записи в "конец" таблицы базы данных при использовании в качестве первичного ключа базы данных с кластерным индексом. Это помогает предотвратить фрагментацию индекса базы данных и разбиение страниц.
Если случайные GUID используются как первичные ключи базы данных с кластеризованными индексами, новые записи будут помещены случайным образом в "середине" таблицы с точки зрения физического распределения, что приведет к фрагментации индекса и частично заполненным страницам базы данных с течением времени.
Использование последовательных GUID по-прежнему позволяет создавать GUID самостоятельно на нескольких системах и быть уверенным, что не будет никаких коллизий (свойство, которое вы не получаете, используя последовательные целые числа в качестве первичных ключей, не выделяя "диапазоны" или разные семена и приращения каждая система, которая является административным кошмаром в больших распределенных приложениях).
Ответ 5
Короче говоря, 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
будет иметь одинаковое значение в последовательных прогонах.
Он чаще используется для мьютексов, примером может быть создание одного экземпляра приложения и использование мьютекса с директором гарантирует время жизни экземпляра приложения.
Даже в некоторых случаях он используется в базе данных, но метод его использования неодобрен.