2017-07-05 4 views
2

Bei der Untersuchung des Themas gestern fand ich einige interessante Fragen (wie this one) darüber, wie GUIDs letztlich erzeugt werden. In Kürze; es scheint, dass Guid.NewGuid(); ruft CoCreateGuid in der COM, die wiederum ruft UuidCreate in der Windows-RPC (docs here und here).Guid.NewGuid(); hinter den Kulissen in .NET Core

Ich fand mich wundernd; Wie funktioniert das, wenn das Betriebssystem nicht Windows ist, wie dies bei .NET Core der Fall sein könnte, und wirkt sich das auf die 'version' algorithm aus, die zum Generieren der GUID verwendet wird (was ich unter Version 4 unter Windows verstehe)?

+4

Sie überprüfen, wie Mono es hier tut: https://github.com/mono/mono/blob/master/mcs/class/corlib/System/Guid.cs – Magnus

Antwort

7

Auf Nicht-Windows-Computern wird .NET Core entweder uuid_create auf BSD (die "Version 1" ist) oder libuuids uuid_generate_random-Funktion auf macOS und linux ("Version 4") verwenden.

Die Implementierung für die Ersetzung CoCreateGuid Funktion kann in CoreCLR's source code on GitHub gefunden werden.

+0

'nm libcoreclr.dylib | grep uuid' (macOS) sagt, dass es 'uuid_generate_random' aufruft; Das ist eine GUID von v4. 'uuid_create' muss irgendwo auf dieser Plattform ein Makro sein. – bartonjs

+0

sry ja macOS verwendet auch die andere Funktion, ich nahm an, dass es hier auf BSD ausgerichtet ist. Ein kurzer Check sagt mir, dass macOS tatsächlich einen '' Header mit 'uuid_generate_random' von' libSystem.B.dylib' liefert –

Verwandte Themen