173 lines
5.9 KiB
C#
173 lines
5.9 KiB
C#
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 = false;
|
||
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)
|
||
{
|
||
var options = new IdGeneratorOptions()
|
||
{
|
||
Method = method,
|
||
WorkerId = 1,
|
||
|
||
//TopOverCostCount = 2000,
|
||
//WorkerIdBitLength = 1,
|
||
//SeqBitLength = 2,
|
||
|
||
//MinSeqNumber = 1,
|
||
|
||
// MaxSeqNumber = 200,
|
||
|
||
// BaseTime = DateTime.Now.AddYears(-10),
|
||
};
|
||
|
||
IIdGenerator IdGen = new DefaultIdGenerator(options);
|
||
GenTest genTest = new GenTest(IdGen, genIdCount, options.WorkerId);
|
||
|
||
// 首先测试一下 IdHelper 方法,获取单个Id
|
||
YitIdHelper.SetIdGenerator(options);
|
||
long newId = YitIdHelper.NextId();
|
||
Console.WriteLine("=====================================");
|
||
Console.WriteLine("这是用方法 " + method + " 生成的 Id:" + newId);
|
||
|
||
while (true)
|
||
{
|
||
Go(options);
|
||
Thread.Sleep(1000); // 每隔3秒执行一次Go
|
||
Console.WriteLine("Hello World! C#");
|
||
}
|
||
}
|
||
|
||
private static void Go(IdGeneratorOptions options)
|
||
{
|
||
Count = 0;
|
||
testList = new List<GenTest>();
|
||
|
||
// ++++++++++++++++++++++++++++++++
|
||
if (single)
|
||
{
|
||
if (IdGen == null)
|
||
{
|
||
IdGen = new DefaultIdGenerator(options);
|
||
}
|
||
|
||
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 newOptions = new IdGeneratorOptions()
|
||
{
|
||
WorkerId = (ushort)i, // workerId 不能设置为0
|
||
WorkerIdBitLength = options.WorkerIdBitLength,
|
||
SeqBitLength = options.SeqBitLength,
|
||
MinSeqNumber = options.MinSeqNumber,
|
||
MaxSeqNumber = options.MaxSeqNumber,
|
||
Method = options.Method,
|
||
};
|
||
|
||
Console.WriteLine("Gen:" + i);
|
||
var idGen2 = new DefaultIdGenerator(newOptions);
|
||
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}");
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|