C# 多线程、控制线程数提高循环输出效率
2012-12-07 16:16
471 查看
C#多线程及控制线程数量,对for循环输出效率。
虽然输出不规律,但是效率明显提高。
思路:
如果要删除1000条数据,只使用for循环,则一个接着一个输出。所以,把1000条数据分成seed段,每段10条数据。
注:createCount.Value的值是具体输出数据的数量
这里把数据分配给seed个线程去处理,每个线程只输出10个数据。
分段后,再将分段后的数据分配给其它线程来处理,这样就能多线程同时工作了,由于要对控件操作,所以使用多线程的话要依靠委托来实现多线程对控件的控制。所以最后一步的输出,如下:
因为我的数据要保证位数,所以要对0做简单处理。例如 我要输出
000000
000001
000002
000003
........
从上面的代码可以看出,我是使用for来递增的。所以是整型,前面的0随着数值的大小不断改变个数。
好了。简单的多线程处理。希望大家可以学习。欢迎大家指导~~
虽然输出不规律,但是效率明显提高。
思路:
如果要删除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# 多线程、控制线程数提高循环输出效率
- 转 C#多线程及控制线程数量,对for循环输出效率
- 转 C#多线程及控制线程数量,对for循环输出效率
- IPhone 利用宏对Debug和Release控制日志输出,提高开发效率
- Java多线程:用三个线程控制循环输出10次ABC
- C#并行运行迭代(循环),提高运行效率
- Java多线程:用三个线程控制循环输出10次ABC
- Java多线程:用三个线程控制循环输出10次ABC
- Java多线程:用三个线程控制循环输出10次ABC
- 关于多线程io能否提高程序效率
- 多线程:C# 多线程控制 通讯 和切换
- 第十一周实验报告1--学会使用循环控制语句解决实际问题,并强化注重效率的观念
- 用C#实现蜘蛛/爬虫程序的多线程控制
- 多线程控制文件输出
- vs2003 asp.net中直接输出wml,并利用C#做动态页面的控制,不使用微软的移动控件
- Beginning C# Objects从概念到代码——1.11 循环和其他控制结构流程(二)
- C# 多线程控制控件实例(例程简单,注释详细)
- 多线程提高效率的情况