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); }
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); }
/// <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); }
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); }
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")); }