继续从上次的值记录开始继续

时间:2022-01-18 08:21:57

在visual studio 中的NuGet打点器中可以下载安置,也可以直接在NuGet控制台输入下面的指令安置:

Install-Package HslCommunication

NuGet安置教程 

技术撑持QQ群:592132877 (组件的版本更新细节也将第一时间在群里颁布)

    Summary

实现一个简单的流水号生成器其实是很简单的事,可以使用InterLock的原子操纵来实现线程间的同步操纵,然后供给一个API来获取值,关键就在于当前值的记录存储,无论如何,当措施*从头打开的时候,继续从上次的值记录开始继续,如果每次都存储文件,性能将会非常的低下,所以在此处实现了一个高性能的流水号生成器,给与乐不雅观并发模型存储,不才面的代码里测试了生成100万个流水号的时间,就可以比拟性能。

Reference

流水号组件所有的成果类都在 HslCommunication.BasicFramework 定名空间,所以再使用之前先添加

using HslCommunication.BasicFramework

How to Use

首先,流水号的类就应该设置在处事器端,这样就能对所有的客户端进行掌控申请。处事器真个实例化如下所示:

private void FormSeqTest_Load(object sender, EventArgs e) { softNumericalOrder = new HslCommunication.BasicFramework.SoftNumericalOrder( "ABC", // "ABC201711090000001" 中的ABC前缀,代码中仍然可以变动ABC "yyyyMMdd", // "ABC201711090000001" 中的20171109,可以格局化时间,也可以为"",也可以设置为"yyyyMMddHHmmss"; 7, // "ABC201711090000001" 中的0000001,总位数为7,然后不竭的累加,即使日期时间变了,也不竭的累加,最好长度设置大一些 Application.StartupPath + @"\numericalOrder.txt" // 该生成器会自动存储当前值到文件去,实例化时从文件加载,自动实现数据同步 ); } private HslCommunication.BasicFramework.SoftNumericalOrder softNumericalOrder; // 序列号生成器东西

注意:序号的位数最高可以设置为20位,即2的64次方,任何系统都够用了,一秒钟生成1亿个,可以使用5800年

然后我们就可以在按钮里进行申请流水号了:

private void userButton1_Click(object sender, EventArgs e) { // 获取流水号,带有默认的数据头,也即实例化中的"ABC" string seqNumber = softNumericalOrder.GetNumericalOrder(); textBox1.AppendText(seqNumber + Environment.NewLine); } private void userButton3_Click(object sender, EventArgs e) { // 获取流水号,带有自界说的数据头 string seqNumber = softNumericalOrder.GetNumericalOrder("XYZ"); textBox1.AppendText(seqNumber + Environment.NewLine); }

上面的两个按钮展示了两种方法,流水号的头可以按照本身的需求填入本身的值,那么我们两个按钮随便点几次吧。

然后我们去看看阿谁txt文件的值:

继续从上次的值记录开始继续

性能测试

以下代码测试瞬间的100万次请求,和多线程的效率是一样的,因为内部已经有混合锁的同步机制。

private void userButton2_Click(object sender, EventArgs e) { // 百万次的流水号测试 DateTime start = DateTime.Now; for (int i = 0; i < 1000000; i++) { string seqNumber = softNumericalOrder.GetNumericalOrder("XYZ"); } double spend = (DateTime.Now - start).TotalMilliseconds; textBox1.AppendText("耗时:" + spend + Environment.NewLine); }

执行完成后,显示如下:

继续从上次的值记录开始继续

功效看来,花了949毫秒,性能已经非常的强悍,测试机器为I5的4590CPU,具体时间依照电脑性能会有微小的分歧。

我们最后还是要去阿谁txt文件进行验证下这个流水号是不是正确,因为我们适才能用了100万次要领,那么此刻的值应该是1000021吧

继续从上次的值记录开始继续

至此,这个成果的代码开发介绍完毕,如果有不大白的,,可以进文章开始处的QQ群进行交流。