C# 使用Task.Factory.StartNew新创建的线程启动非常缓慢
在WPF/c#应用程序中,使用由C# 使用Task.Factory.StartNew新创建的线程启动非常缓慢,c#,multithreading,.net-4.0,task-parallel-library,C#,Multithreading,.net 4.0,Task Parallel Library,在WPF/c#应用程序中,使用由Task.Factory.StartNew创建的大约50-200个短期工作线程,新创建的线程开始执行需要1到10秒 线程执行启动非常慢的原因是什么 更新: 延迟为500毫秒发现当使用的线程池线程数超过特定值时,线程池可能不愿意每500毫秒启动一个以上的新线程。但是,将MinThreads使用(尽管不推荐使用)增加到100使我能够创建100个线程,而不会有500毫秒的延迟 以下是对我的帮助: 编辑: 以下是我在App.xaml.cs中(在构造函数中)完成的
Task.Factory.StartNew
创建的大约50-200个短期工作线程,新创建的线程开始执行需要1到10秒
线程执行启动非常慢的原因是什么
更新:
延迟为500毫秒发现当使用的线程池线程数超过特定值时,线程池可能不愿意每500毫秒启动一个以上的新线程。但是,将MinThreads使用(尽管不推荐使用)增加到100使我能够创建100个线程,而不会有500毫秒的延迟 以下是对我的帮助:
App.xaml.cs
中(在构造函数中)完成的工作:
它将只使用一个
ThreadPool
线程,其中有一个有限的可用池。您可能正在经历线程不足。这取决于许多因素。系统逻辑处理器计数、系统资源可用性、进程优先级、线程优先级、线程池最小最大线程限制、进程在此期间的线程池线程活动,etc@AdamHouldsworth-但是Task.Factory.StartNew不使用线程池吗?Task.Factory.StartNew中使用的任务使用了一个ADPool线程:@MortenFrederiksen是的,它使用的线程数量有限。如果ThreadPool
已完全分配,则等待或创建新线程都要花费时间。@SriramSakthivel-ThreadPool.GetMaxThreads返回1023/1000
// Get thread pool information
int workerThreadsMin, completionPortThreadsMin;
ThreadPool.GetMinThreads(out workerThreadsMin, out completionPortThreadsMin);
int workerThreadsMax, completionPortThreadsMax;
ThreadPool.GetMaxThreads(out workerThreadsMax, out completionPortThreadsMax);
// Adjust min threads
ThreadPool.SetMinThreads(workerThreadsMax, completionPortThreadsMin);