强制ThreadPool更快地启动线程
我使用ThreadPool.QueueUserWorkItem在Windows CE上创建一个线程(我使用.NET Framework 3.5)。 有时线程会等待某些事情并且开始得太晚。 在QueueUserWorkItem文档中,它表示代理将在“线程池线程可用时”执行。
有没有办法强制ThreadPool立即执行我的委托? Thread.Start()会成为一个解决方案吗?
谢谢!
首先, QueueUserWorkItem
不会创建一个线程,它只是在ThreadPool的队列中放置一个“任务”,供工人拿起并执行。 如果饱和(任务多于可用线程),则无法保证工作人员何时可以执行任务。 如果要立即执行,请改用Thread
实例。 提高ThreadPool赔率的唯一方法是增加工人数量。
编辑 :要明确的是,如果线程池线程确实是空闲的,那么它们通常会比启动新线程更快地完成工作并执行它。
ThreadPool的大小有限。 因此,您不能在同一时间内尽可能多地吃午餐。 如果所有线程都忙,那么你必须等待一个线程可用。
检查要午餐的线程数,并将其与Threadpool大小进行比较 – > GetMaxThreads()
然后,如果你想要更多的线程,只需使用SetMaxThreads(int)
调整池的大小
如果从池中启动大量线程,则可以在没有空闲线程并且您的请求排队时获得情况,这就是为什么有时它会开始延迟。 尝试增加池中的最大工作线程数。 使用ThreadPool.SetMaxThreads
和ThreadPool.SetMinThreads
配置池。