1
0
mirror of synced 2026-04-15 04:48:39 +08:00
This commit is contained in:
zhouzj
2021-03-13 22:52:42 +08:00
parent 7cd5a0e8fc
commit 445ab2763e
33 changed files with 1281 additions and 19 deletions

View File

@@ -0,0 +1,163 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using Yitter.IdGenerator;
namespace Yitter.OrgSystem.TestA
{
class Program
{
// 测试参数默认配置下最佳性能是10W/s
static int genIdCount = 50000; // 计算ID数量如果要验证50W效率请将TopOverCostCount设置为20000或适当增加SeqBitLength
static short method = 1; // 1-漂移算法2-传统算法
static bool single = true;
static bool outputLog = true;
static IIdGenerator IdGen = null;
static IList<GenTest> testList = new List<GenTest>();
static bool checkResult = false;
public static int Count = 0;
static int workerCount = 1;
static void Main(string[] args)
{
while (true)
{
Go();
Thread.Sleep(1000); // 每隔3秒执行一次Go
Console.WriteLine("Hello World!");
}
}
private static void Go()
{
Count = 0;
testList = new List<GenTest>();
var newConfig = new IdGeneratorOptions()
{
Method = method,
WorkerId = 1,
TopOverCostCount = 10000,
//WorkerIdBitLength = 6,
//SeqBitLength = 9,
//MinSeqNumber = 11,
//MaxSeqNumber = 200,
StartTime = DateTime.Now.AddYears(-10),
};
// ++++++++++++++++++++++++++++++++
if (single)
{
if (IdGen == null)
{
IdGen = new DefaultIdGenerator(newConfig);
}
if (outputLog)
{
IdGen.GenIdActionAsync = (arg =>
{
if (arg.ActionType == 1)
{
Console.WriteLine($">>>> {arg.WorkerId}:开始:{DateTime.Now.ToString("mm:ss:fff")}, 周期次序:{arg.TermIndex}");
}
else if (arg.ActionType == 2)
{
Console.WriteLine($"<<<< {arg.WorkerId}:结束:{DateTime.Now.ToString("mm:ss:fff")},漂移 {arg.OverCostCountInOneTerm} 次,产生 {arg.GenCountInOneTerm} 个, 周期次序:{arg.TermIndex}");
}
if (arg.ActionType == 8)
{
Console.WriteLine($"---- {arg.WorkerId}AA结束{DateTime.Now.ToString("mm:ss:fff")},时间回拨");
}
});
}
for (int i = 1; i < workerCount + 1; i++)
{
Console.WriteLine("Gen" + i);
var test = new GenTest(IdGen, genIdCount, i);
testList.Add(test);
// test.GenId();
test.GenStart();
}
}
else
{
for (int i = 1; i < workerCount + 1; i++)
{
IdGeneratorOptions options =
new IdGeneratorOptions()
{
WorkerId = (ushort)i, // workerId 不能设置为0
WorkerIdBitLength = newConfig.WorkerIdBitLength,
SeqBitLength = newConfig.SeqBitLength,
MinSeqNumber = newConfig.MinSeqNumber,
MaxSeqNumber = newConfig.MaxSeqNumber,
Method = newConfig.Method,
};
Console.WriteLine("Gen" + i);
var idGen2 = new DefaultIdGenerator(options);
var test = new GenTest(idGen2, genIdCount, i);
if (outputLog)
{
idGen2.GenIdActionAsync = (arg =>
{
Console.WriteLine($"{DateTime.Now.ToString("mm:ss:fff")} {arg.WorkerId} 漂移了 {arg.OverCostCountInOneTerm}, 顺序:{arg.TermIndex}");
});
}
testList.Add(test);
// test.GenId();
test.GenStart();
}
}
while (Count < workerCount)
{
//Console.WriteLine("Count" + Count);
Thread.Sleep(1000);
}
//Console.WriteLine("Count" + Count);
if (!checkResult)
{
return;
}
var dupCount = 0;
foreach (var id in testList[0].idList)
{
if (id == 0)
{
Console.WriteLine("############### 错误的ID" + id + "###########");
}
for (int j = 1; j < testList.Count; j++)
{
if (testList[j].idList.Contains(id))
{
dupCount++;
Console.WriteLine("xxxxxxxxxx 重复的ID" + id);
}
}
}
if (dupCount > 0)
{
Console.WriteLine($"重复数量:{dupCount}");
}
}
}
}