大大大大大大猩猩

导航

生成连续的UUID

添加接口文件

1 [DllImport("rpcrt4.dll", SetLastError = true)]
2 private static extern int UuidCreateSequential(out Guid guid);
View Code

生成连续的UUID,底层调用了Windows API UuidCreateSequential。经测试发现,
/// UuidCreateSequential,在多CPU并发状态下,有可能会产生重复数据,因此这个方法进行的并发控制,并延迟1毫秒。
/// 另外,UuidCreateSequential的生成和网络连接有关(网卡),如果电脑上插了Windows Mobile的手机,会产生新的网络连接,
/// 导致UuidCreateSequential出错,此时,这个方法将使用传统的Guid来替代Uuid。

 1   public static Guid NewUuid()
 2         {
 3             Guid result;
 4 
 5             lock (typeof(UuidHelper))
 6             {
 7                 int hr = UuidCreateSequential(out result);
 8 
 9                 if (hr == 0)
10                     result = Guid.NewGuid();
11 
12                 Thread.Sleep(1);
13             }
14 
15             return result;
16         }
View Code

在本机生成连续的Guid

 1   public static string NewUuidString()
 2         {
 3             Guid result = NewUuid();
 4 
 5             byte[] guidBytes = result.ToByteArray();
 6 
 7             for (int i = 0; i < 8; i++)
 8             {
 9                 byte t = guidBytes[15 - i];
10                 guidBytes[15 - i] = guidBytes[i];
11                 guidBytes[i] = t;
12             }
13 
14             return new Guid(guidBytes).ToString();
15         }
View Code

 

posted on 2021-03-02 17:06  大大大大大大猩猩  阅读(257)  评论(0)    收藏  举报