在日常開發中常見於生成主鍵的ID,比較規范好用,詳細代碼如下(寫注釋是個好習慣):
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Threading; using System.Web; namespace MVCDemo.Models.Common { public static class UuidHelper { [DllImport("rpcrt4.dll", SetLastError = true)] private static extern int UuidCreateSequential(out Guid guid); /// <summary> /// 生成連續的UUID,底層調用了Windows API UuidCreateSequential。經測試發現, /// UuidCreateSequential,在多CPU並發狀態下,有可能會產生重復數據,因此這個方法進行的並發控制,並延遲1毫秒。 /// 另外,UuidCreateSequential的生成和網絡連接有關(網卡),如果電腦上插了Windows Mobile的手機,會產生新的網絡連接, /// 導致UuidCreateSequential出錯,此時,這個方法將使用傳統的Guid來替代Uuid。 /// </summary> /// <returns>在本機生成連續的Guid</returns> public static Guid NewUuid() { Guid result; lock (typeof(UuidHelper)) { int hr = UuidCreateSequential(out result); if (hr == 0) result = Guid.NewGuid(); Thread.Sleep(1); } return result; } /// <summary> /// 生成連續的UUID,底層調用了Windows API UuidCreateSequential /// </summary> /// <returns>在本機生成連續的Guid</returns> public static string NewUuidString() { Guid result = NewUuid(); byte[] guidBytes = result.ToByteArray(); for (int i = 0; i < 8; i++) { byte t = guidBytes[15 - i]; guidBytes[15 - i] = guidBytes[i]; guidBytes[i] = t; } return new Guid(guidBytes).ToString(); } }