高并发下的Id生成器_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 高并发下的Id生成器

高并发下的Id生成器

 2013/12/6 18:26:17  Aaron Dai  博客园  我要评论(0)
  • 摘要:考虑到sqlserver以及c#,最多只能用decimal类型,也就是29位的数字,做了下面这个数字型id生成器:classProgram{staticvoidMain(string[]args){inti=100000;Timingt=newTiming();t.Start();while(i-->0)UniqueIdGenerator.Next();t.Stop();t.Display("");}}publicstaticclassUniqueIdGeneratorHelper
  • 标签:

考虑到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++;
            }
        }
    }

 

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

 

 

  • 相关文章
发表评论
用户名: 匿名