博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 多线程、控制线程数提高循环输出效率
阅读量:5115 次
发布时间:2019-06-13

本文共 2625 字,大约阅读时间需要 8 分钟。

C#多线程及控制线程数量,对for循环输出效率。

 

虽然输出不规律,但是效率明显提高。

思路:

如果要删除1000条数据,只使用for循环,则一个接着一个输出。所以,把1000条数据分成seed段,每段10条数据。

int seed = Convert.ToInt32(createCount.Value) % 10 == 0 ? Convert.ToInt32(createCount.Value) / 10 : Convert.ToInt32(createCount.Value) / 10 + 1;

注:createCount.Value的值是具体输出数据的数量

这里把数据分配给seed个线程去处理,每个线程只输出10个数据。

int threadCountTmp = 0;//任务线程分派数        private void btnCreate_Click(object sender, EventArgs e)        {            int seed = Convert.ToInt32(createCount.Value) % 10 == 0 ? Convert.ToInt32(createCount.Value) / 10 : Convert.ToInt32(createCount.Value) / 10 + 1;            for (int i = 0; i < seed; i++)            {                Thread threadTmp = new Thread(new ParameterizedThreadStart(TempOut));                threadTmp.Start(i);                threadCountTmp++;                Application.DoEvents();//响应窗口状态                while (true) { if (threadCountTmp < 10) break; }//推拉窗式控制多线程 线程数10            }}        //分段后的数据发布给其它线程        public void TempOut(object o)        {            int tmp=Convert.ToInt32(o)*10;            int i = tmp;            for (; i < (tmp+10<=createCount.Value?tmp+10:createCount.Value); i++)            {                Thread thread = new Thread(new ParameterizedThreadStart(ResultOut));                thread.Start(i);                threadCount++;                while (true) { if (threadCount < 10) break; }//推拉窗式控制多线程   线程数10            }            threadCountTmp--;        }

分段后,再将分段后的数据分配给其它线程来处理,这样就能多线程同时工作了,由于要对控件操作,所以使用多线程的话要依靠委托来实现多线程对控件的控制。所以最后一步的输出,如下:

delegate void TextTmp(object o);//声明委托        int threadCount = 0;//任务线程        //委托函数        public void ResultOut(object o)        {            if (!txtResult.InvokeRequired)            {                txtResult.Text = "\n" + f_groundcode.Text + "," + f_ticketno.Text + DateTime.Now.ToLongDateString().Replace("-", "") + GetZero(6 - o.ToString().Length) + o.ToString() + "," + DateTime.Now.ToLongDateString().Replace("-", "") + DateTime.Now.ToLongTimeString().Replace(":", "") + txtResult.Text;            }            else            {                TextTmp tmpDel = new TextTmp(ResultOut);                this.Invoke(tmpDel,o);            }            threadCount--;        }

因为我的数据要保证位数,所以要对0做简单处理。例如 我要输出

000000

000001

000002

000003

........

从上面的代码可以看出,我是使用for来递增的。所以是整型,前面的0随着数值的大小不断改变个数。

//处理数字前面有多少个0        private string GetZero(int leng)        {            string result = "";            for (int i = 0; i < leng; i++)            {                result += "0";            }            return result;        }

好了。简单的多线程处理。希望大家可以学习。欢迎大家指导~~

转载于:https://www.cnblogs.com/zxtceq/p/7767373.html

你可能感兴趣的文章
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
jQuery Mobile笔记
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>
查询数据(后台到前台传递数据,显示数据)
查看>>
集群tomcat+apache配置文档
查看>>
VMware Tools安装
查看>>
Linux上架设boost的安装及配置过程
查看>>
[转载]加密算法库Crypto——nodejs中间件系列
查看>>
zoj 2286 Sum of Divisors
查看>>
OO5~7次作业总结
查看>>
如何判断主机是大端还是小端(字节序)
查看>>
Centos7 日志查看工具
查看>>
使用Xshell密钥认证机制远程登录Linux
查看>>
OpenCV之响应鼠标(三):响应鼠标信息
查看>>
python7 数据类型的相互转化 字符编码
查看>>
Android 画图之 Matrix(一)
查看>>
List<T>列表通用过滤模块设计
查看>>
【模板】最小生成树
查看>>