本文最后更新于 1050 天前,其中的信息可能已经有所发展或是发生改变。
手写方法生成Guid
在C#的System
类中已经为我们预定义了结构体Guid
用于生成Guid,我们还可以通过手写方法来实现生成Guid
public static string NewGuid() { string[] a = { "A", "B", "C", "D", "E", "F", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; StringBuilder stringBuilder = new StringBuilder(); var r = new Random(); Parallel.For(0, 32, i => { stringBuilder.Append(a[r.Next(0, 15)]); }); return stringBuilder.ToString(); }
效率比较
系统方法和手写代码各执行10000次,比较效率。
[neilian ids=1024]
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GUID { class Program { public static string NewGuid() { string[] a = { "A", "B", "C", "D", "E", "F", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" }; StringBuilder stringBuilder = new StringBuilder(100); var r = new Random(); Parallel.For(0, 32, i => { stringBuilder.Append(a[r.Next(0, 15)]); }); return stringBuilder.ToString(); } static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 1; i <= 10000; i++) { var guid = Guid.NewGuid(); guid.ToString("N"); } sw.Stop(); Console.WriteLine("系统方法总共花费{0}ms.", sw.ElapsedMilliseconds); sw.Reset(); sw.Start(); for (int i = 1; i <= 10000; i++) { NewGuid(); } sw.Stop(); Console.WriteLine("手写方法总共花费{0}ms.", sw.ElapsedMilliseconds); Console.ReadKey(); } } }
最终结果
手写方法完败 😈
系统方法总共花费4ms. 手写方法总共花费106ms.