2017-07-05 11 views
2

昨日の主題を調べると、最終的にGUIDがどのように生成されるかという興味深い質問(例:this one)が見つかりました。簡単に言うと、 Guid.NewGuid();は、Windows RPC(docs herehere)のUuidCreateをCOMで呼び出すCoCreateGuidを呼び出しているようです。Guid.NewGuid(); .NETコアの背後にある

私は自分自身に疑問を感じました。 .NET Coreの場合など、OSがでなく、 Windowsの場合、これはどのように動作しますか?これはGUIDの生成に使用される'version' algorithmに影響しますか?

+4

ここでMonoの動作を確認します:https://github.com/mono/mono/blob/master/mcs/class/corlib/System/Guid.cs – Magnus

答えて

7

Windows以外のマシンでは、.NET CoreはBSDの「uuid_create」(「バージョン1」)またはmacOSおよびlinux(「バージョン4」)のlibuuidのuuid_generate_randomのいずれかの機能を使用します。

置換CoCreateGuid関数の実装はCoreCLR's source code on GitHubにあります。

+0

'nm libcoreclr.dylib | grep uuid'(macOS)は 'uuid_generate_random'を呼び出します。これはv4のGUIDです。 'uuid_create'はそのプラットフォームのどこかのマクロでなければなりません。 – bartonjs

+0

sryはいmacOSは他の関数も使用していますが、ここではそれをBSDに合わせると仮定しました。クイックチェックでは、macOSは 'libSystem.B.dylib'によって' uuid_generate_random'が提供された ''ヘッダを実際に配送しています –

関連する問題