程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 高並發下的Id生成器

高並發下的Id生成器

編輯:關於C#

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

十萬次請求,花了半秒不到,應該還行。

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved