强制ThreadPool更快地启动线程

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

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

谢谢!

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

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

ThreadPool的大小有限。 因此,您不能在同一时间内尽可能多地吃午餐。 如果所有线程都忙,那么你必须等待一个线程可用。

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

然后,如果你想要更多的线程,只需使用SetMaxThreads(int)调整池的大小

如果从池中启动大量线程,则可以在没有空闲线程并且您的请求排队时获得情况,这就是为什么有时它会开始延迟。 尝试增加池中的最大工作线程数。 使用ThreadPool.SetMaxThreadsThreadPool.SetMinThreads配置池。