Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Task.Factory.StartNew新创建的线程启动非常缓慢_C#_Multithreading_.net 4.0_Task Parallel Library - Fatal编程技术网

C# 使用Task.Factory.StartNew新创建的线程启动非常缓慢

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中(在构造函数中)完成的

在WPF/c#应用程序中,使用由
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);