强制ThreadPool更快地启动线程

时间:2013-06-05 15:34:03

标签: c# multithreading threadpool

我使用ThreadPool.QueueUserWorkItem在Windows CE上创建线程(我使用.NET Framework 3.5)。有时线程会等待某些事情并且开始得太晚。在QueueUserWorkItem文档中,它表示代理将在“线程池线程可用时”执行。

有没有办法强制ThreadPool立即执行我的委托? Thread.Start()会成为一个解决方案吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

首先,QueueUserWorkItem不创建一个线程,它只是在ThreadPool的队列中放置一个“任务”,供工人拿起并执行。在饱和的情况下(任务多于可用线程),无法保证工作人员何时可以执行任务。如果您想立即执行,请使用Thread的实例。使用ThreadPool提高赔率的唯一方法是增加工人数量。

编辑:要明确的是,如果线程池线程确实是空闲的,那么它们通常会比开始一个新线程更快地完成工作并执行它。

答案 1 :(得分:0)

ThreadPool的大小有限。所以你不能在同一时间吃任意数量的线程。如果所有线程都忙,那么你必须等待一个线程可用。

检查您想要午餐的线程数,并将其与Threadpool大小进行比较 - > GetMaxThreads()

然后,如果您想要更多线程,只需使用SetMaxThreads(int)

调整池的大小

答案 2 :(得分:0)

如果你从一个池中启动了很多线程,你可以在没有自由线程并且你的请求排队的情况下得到这种情况,这就是为什么有时它会开始迟到的原因。尝试增加池中的最大工作线程数。使用ThreadPool.SetMaxThreadsThreadPool.SetMinThreads配置池。