예제 #1
0
        public void NextId_Test()
        {
            var worker = new SnowflakeIdWorker(0, 0);

            var id1 = worker.NextId();
            var id2 = worker.NextId();

            Assert.IsTrue(id1 > 0);
            Assert.IsTrue(id2 > 0);
            Assert.IsTrue(id1 != id2);
            Console.WriteLine(id1);
            Console.WriteLine(id2);
        }
예제 #2
0
        public void Next_Base36_Decode_Test()
        {
            var snowflakeIdWorker = new SnowflakeIdWorker(1, 1);
            var nextId            = snowflakeIdWorker.NextId();
            var encode            = Base36Converter.Encode(nextId);
            var decode            = Base36Converter.Decode(encode);

            Console.WriteLine(encode);
            Assert.AreEqual(nextId, decode);
        }
예제 #3
0
        /// <summary>
        /// 获取添加数据的SQL语句
        /// <summary>
        public string SetInsert()
        {
            string strSQL = "INSERT INTO [User] (UserID,DingDingUserID,DingDingDeptID,UserName,Account,Password,ChangeTime,Mobile,WorkPlace,Memo,IsDeleted) VALUES (@UserID,@DingDingUserID,@DingDingDeptID,@UserName,@Account,@Password,getdate(),@Mobile,@WorkPlace,@Memo,@IsDeleted)";

            UserID = snowflakeIdWorker.NextId().ToString();
            SqlParameter[] sp = new SqlParameter[11];
            sp[0]  = new SqlParameter("@UserID", UserID);
            sp[1]  = new SqlParameter("@DingDingUserID", DingDingUserID);
            sp[2]  = new SqlParameter("@DingDingDeptID", DingDingDeptID);
            sp[3]  = new SqlParameter("@UserName", UserName);
            sp[4]  = new SqlParameter("@Account", Account);
            sp[5]  = new SqlParameter("@Password", Password);
            sp[6]  = new SqlParameter("@ChangeTime", ChangeTime);
            sp[7]  = new SqlParameter("@Mobile", Mobile);
            sp[8]  = new SqlParameter("@WorkPlace", WorkPlace);
            sp[9]  = new SqlParameter("@Memo", Memo);
            sp[10] = new SqlParameter("@IsDeleted", IsDeleted);

            new DbHelper().ExcuteNonQuery(strSQL, sp);
            return(UserID);
        }
예제 #4
0
        public void IDWorkTest()
        {
            long           startTimestmap = (long)(DateTime.UtcNow.AddDays(-20) - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
            IIDWorker      iDWorker       = new SnowflakeIdWorker(startTimestmap, 10, 1);
            int            count          = 300 * 10000;
            HashSet <long> idSet          = new HashSet <long>();
            object         testLock       = new object();
            AutoResetEvent autoResetEvent = new AutoResetEvent(false);
            int            invokeCount    = 0;

            try
            {
                for (int i = 0; i < count; i++)
                {
                    Task.Run(() =>
                    {
                        var id = iDWorker.NextId();
                        lock (testLock)
                        {
                            if (!idSet.Add(id))
                            {
                                autoResetEvent.Set();
                                return;
                            }
                        }

                        Console.WriteLine(id);
                        if (count == Interlocked.Increment(ref invokeCount))
                        {
                            autoResetEvent.Set();
                            Console.WriteLine("go!");
                        }
                    });
                }

                autoResetEvent.WaitOne();
            }
            finally
            {
                autoResetEvent.Dispose();
            }
            Assert.AreEqual(count, idSet.Count);
            Assert.AreEqual(count, invokeCount);
        }
예제 #5
0
        public void NextId_Duplicate_issues_2_Test()
        {
            var snowflakeIdWorker  = new SnowflakeIdWorker(1, 1);
            var blockingCollection = new BlockingCollection <long>();
            var tasks = new List <Task>();

            for (int i = 0; i < 100; i++)
            {
                var task = Task.Run(() =>
                {
                    for (int j = 0; j < 10000; j++)
                    {
                        blockingCollection.Add(snowflakeIdWorker.NextId());
                    }
                });

                tasks.Add(task);
            }

            Task.WaitAll(tasks.ToArray());

            Assert.AreEqual(1000000, blockingCollection.Distinct().Count());
        }
        public void MainTest()
        {
            Trace.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffffff"));
            SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);

            for (int i = 0; i < 1000; i++)
            {
                Trace.WriteLine(string.Format("{0}         {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffffff"), idWorker.NextId()));
            }

            Trace.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffffff"));

            //SequentialGuidGenerator,效率低于SnowflakeIdWorker
            for (int i = 0; i < 1000; i++)
            {
                var id = SequentialGuidGenerator.NewSequentialGuid(SequentialGuidType.SequentialAsString);
                Trace.WriteLine(string.Format("{0}          {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffffff"), id));
            }

            Trace.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffffff"));
        }