C# 多线程、控制线程数提高循环输出效率

原文: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;
        }

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

原文地址:https://www.cnblogs.com/lonelyxmas/p/9102995.html

时间: 2024-08-28 14:14:11

C# 多线程、控制线程数提高循环输出效率的相关文章

[转载]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

通过设置Weblogic设置线程数提高系统并发

使用Weblogic版本:Weblogic 11g(10.3.6) 设置Weblogic的线程数有两种方法, 第一种,通过启动参数设置: -Dweblogic.threadpool.MinPoolSize=1000 -Dweblogic.threadpool.MaxPoolSize=1000 可以加在setDomainEnv.sh文件JAVA_OPTIONS下面: 第二种,通过config.xml配置文件: <server>     <name>AdminServer</na

JAVA基础知识之多线程——控制线程

join线程 在某个线程中调用其他线程的join()方法,就会使当前线程进入阻塞状态,直到被join线程执行完为止.join方法类似于wait, 通常会在主线程中调用别的线程的join方法,这样可以保证在所有的子线程执行结束之后在主线程中完成一些统一的步骤.下面是一个例子, package threads; public class JoinThread extends Thread { public JoinThread(String name) { super(name); } public

c# 指定线程数的多线程操作

多线程操作一直用ThreadPool.QueueUserWorkItem比较多,今天想到用这个方式实现,控制并发线程的数量. 主要思路是: 1.声明开启的线程数 int threadCount = 2; 2.创建一个泛型集合List<TaskInfo>  workingList = new List<TaskInfo>(); 需要开启多少个线程,就从Queue里取几个taskInfo,添加到workingList,同时,把TaskInfo.IsBusy置为true. 3.在子线程中

轻松学会多线程(三)——如何确定线程数

一般情况下,在互联网编程中,我们会使用多线程来抢夺网络资源.那么,线程数量我们如何来确定呢? 我们都知道,线程数量和CPU核数有关.所以有人建议说:线程数为核数的两倍最好. 其实只要这些线程不频繁切换.竞争资源的话.想要最优性能,还是根据具体项目慢慢调试. CPU切不切换我们没法控制,只能提高线程优先级以获取更多的CPU时间. CPU除了处理Java还需要处理N多系统和其他线程,一般而言,多线程编程中,在确保内存不溢出的情况下提升线程数是可以提高CPU中签率的,也就是能提高你的程序处理数据的速度

Java多线程开发系列之四:玩转多线程(线程的控制1)

在前文中我们已经学习了:线程的基本情况.如何创建多线程.线程的生命周期.利用已有知识我们已经可以写出如何利用多线程处理大量任务这样简单的程序.但是当应用场景复杂时,我们还需要从管理控制入手,更好的操纵多线程.在第一节中我们讲过,使用多线程的好处之一就是我们可以通过编码和已有类库更好的管理和控制多线程.接下来我会详细的介绍如何管理多线程,包括:对线程的等待.守护线程.线程的睡眠.线程的突然停止.线程的让步.线程的优先级等.由于内容比较多,本节先介绍前两部分:对线程的等待.守护线程 1.线程的等待

通过设置线程池的最小线程数来提高task的效率,SetMinThreads。

http://www.cnblogs.com/Charltsing/p/taskpoolthread.html task默认对线程的调度是逐步增加的,连续多次运行并发线程,会提高占用的线程数,而等若干秒不运行,线程数又会降低.这样,会影响程序多次运行的效率. 即使使用了TaskCreationOptions.LongRunning参数,依然效率偏低.对于一些固定执行时间的线程,我们可以提高线程池的最小线程数,来显著提高task多线程的效率. ThreadPool.SetMinThreads(10

c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。

首先来看传统方法: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Thread thread = new Thread(ThreadFuntion); thread.IsBackground = true; thread.Start(); } private void Thread

Java多线程之线程的控制

Java多线程之线程的控制 线程中的7 种非常重要的状态:  初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dead 如果将"锁池"和"等待队列"都看成是"阻塞"状态的特殊情况,那么可以将线程归纳为5个状态: 新建,就绪,运行,阻塞,死亡. ┌--------------------< 阻塞 ↓                    (1)(2)(3)