C# 多线程、控制线程数提高循环输出效率
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;
}

好了。简单的多线程处理。希望大家可以学习。欢迎大家指导~~
C# 多线程、控制线程数提高循环输出效率的更多相关文章
- [转载]C# 多线程、控制线程数提高循环输出效率
C#多线程及控制线程数量,对for循环输出效率. 虽然输出不规律,但是效率明显提高. 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出.所以,把1000条数据分成seed段,每段 ...
- Python SSH爆破以及Python3线程池控制线程数
源自一个朋友的要求,他的要求是只爆破一个ip,结果出来后就停止,如果是爆破多个,完全没必要停止,等他跑完就好 #!usr/bin/env python #!coding=utf-8 __author_ ...
- JAVA基础知识之多线程——控制线程
join线程 在某个线程中调用其他线程的join()方法,就会使当前线程进入阻塞状态,直到被join线程执行完为止.join方法类似于wait, 通常会在主线程中调用别的线程的join方法,这样可以保 ...
- python多线程,限制线程数
#encoding:utf8 import threading import time data = 0 def func(sleeptime): global data print threadin ...
- Java多线程 - 控制线程
join线程 在某个线程的执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的线程完成为止. join()方法有三种重载形式: join():等待被join的线程执 ...
- Java多线程之如何确定线程数
关于多线程的线程数的确定,最近研读过几篇paper,在此做一下笔记,方便使用时翻看. 1.<Java 虚拟机并发编程>中介绍 就是说:线程数 = CPU的核心数 * (1 - 阻塞系数) ...
- 多线程编程_控制并发线程数的Semaphore
简介 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源.很多年以来,我都觉得从字面上很难理解Semaphore所表达的含义,只能把它比作是 ...
- Java多线程开发系列之四:玩转多线程(线程的控制1)
在前文中我们已经学习了:线程的基本情况.如何创建多线程.线程的生命周期.利用已有知识我们已经可以写出如何利用多线程处理大量任务这样简单的程序.但是当应用场景复杂时,我们还需要从管理控制入手,更好的操纵 ...
- Java多线程之线程的控制
Java多线程之线程的控制 线程中的7 种非常重要的状态: 初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dea ...
随机推荐
- STL源代码分析--第二级空间配置器
本文解说SGI STL空间配置器的第二级配置器. 相比第一级配置器,第二级配置器多了一些机制,避免小额区块造成内存的碎片.不不过碎片的问题,配置时的额外负担也是一个大问题.由于区块越小,额外负担所占的 ...
- HttpClient 模拟登录搜狐微博
http://mengyang.iteye.com/blog/575671 第一次遇到一个这样的问题,"PKIX path building failed" 异常 详解异常: ...
- iOS中 扫描二维码/生成二维码具体解释 韩俊强的博客
近期大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 指示根视图: se ...
- 安装CoreOS到磁盘
1 打开翻&&墙软件 2 打开迅雷,启用“使用IE代理”,下载以下两个文件:(翻&&墙后用IE下会中断) http://stable.release.core-os.n ...
- 【转】AngularJs 弹出框 model(模态框)
原文转至 http://blog.csdn.net/violet_day/article/details/17170585 $modal是一个可以迅速创建模态窗口的服务,创建部分页,控制器,并关联他们 ...
- conda清华源 pip 清华源ubuntu 清华镜像 R代理以及包的安装
vim ~/.condarc channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/ - https:// ...
- 结缘mac
还记得上一次买MacBookPro.是在去年的7月下旬,记得那次是我大学第一次买电脑,那时候刚准备開始研究android.听stormzhang以及android开发界的大佬们对mac开发androi ...
- Excel COM组件使用的注意事项和一些权限问题(转载)
1.实例化Excel的COM组件的时候,不要直接调用类,要用Microsoft提供的接口 原来的写法:Excel.ApplicationClass excelApp = new Excel.Appli ...
- c# mvc 路由规则学习片段
1.初步接触mvc 路由 routes.MapRoute( "CM", "CM/{controller}/{act ...
- 【selenium】Selenium基于Python3的Web自动化测试脚本在IE上运行慢的解决方法
阐述问题: 执行自动化脚本时,发现文本输入在IE浏览器上特别慢,这样大大降低了自动化效率 解决办法:原因是原先下载的IEDriverServer.exe为64位系统的IE,换为32位的IEDriver ...