生成连续的UUID
添加接口文件
1 [DllImport("rpcrt4.dll", SetLastError = true)] 2 private static extern int UuidCreateSequential(out Guid guid);
生成连续的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 }
在本机生成连续的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 }
浙公网安备 33010602011771号