【问题标题】:Guid.NewGuid(); behind the scenes in .NET CoreGuid.NewGuid(); .NET Core 的幕后花絮
【发布时间】:2017-07-05 11:19:31
【问题描述】:

昨天研究这个主题,我发现了几个关于 GUID 最终是如何生成的有趣问题(例如this one)。简单来说;似乎Guid.NewGuid(); 在COM 中调用CoCreateGuid,而后者又在Windows RPC 中调用UuidCreate(文档herehere)。

我发现自己在想;当操作系统是 not Windows 时,这如何工作,例如 .NET Core 的情况,这是否会影响用于生成 GUID 的'version' algorithm(据我所知是第 4 版) Windows)?

【问题讨论】:

标签: c# .net-core uuid guid


【解决方案1】:

在非 Windows 机器上,.NET Core 将在 BSD(即“版本 1”)上使用 uuid_create 或在 macOS 和 linux(“版本 4”)上使用 libuuid 的 uuid_generate_random 函数。

替换CoCreateGuid函数的实现可以在CoreCLR's source code on GitHub中找到。

【讨论】:

  • nm libcoreclr.dylib | grep uuid (macOS) 说它调用uuid_generate_random;这是一个 v4 GUID。 uuid_create 必须是该平台某处的宏。
  • sry 是的,macOS 也使用了其他功能,我假设它在这里与 BSD 对齐。快速检查告诉我,macOS 确实提供了一个 <uuid/uuid.h> 标头,uuid_generate_randomlibSystem.B.dylib 提供
猜你喜欢
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
  • 2017-05-03
相关资源
最近更新 更多