Welcome

首页 / 软件开发 / C# / 高并发下的Id生成器

高并发下的Id生成器2014-04-08 cnblogs Aaron考虑到sql server以及c#,最多只能用decimal类型,也就是29位的数字,做了下面这个数字型id生 成器:

class Program{static void Main(string[] args){int i = 100000;Timing t = new Timing();t.Start();while(i-->0)UniqueIdGenerator.Next();t.Stop();t.Display("");}}public static class UniqueIdGeneratorHelper{public static long IP2Long(String strIP){long[] ip = new long[4];string[] s = strIP.Split(".");ip[0] = long.Parse(s[0]);ip[1] = long.Parse(s[1]);ip[2] = long.Parse(s[2]);ip[3] = long.Parse(s[3]);return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];}}public static class UniqueIdGenerator{static UniqueIdGenerator(){ip = UniqueIdGeneratorHelper.IP2Long("192.168.1.21");//需要自己从配置文件中读取}private static long ip=0;public static decimal Next(){return decimal.Parse(DateTime.Now.ToString("yyyyMMddHHmmssff") + ip.ToString() + GetSequence().ToString());}private static int curSeq = 1;private static object o = 1;private static int GetSequence(){lock (o){if (curSeq > 999)curSeq = 1;return curSeq++;}}}

十万次请求,花了半秒不到,应该还行。