C# 延迟获取ASP.NETCore3.0项目中的工作线程

C# 延迟获取ASP.NETCore3.0项目中的工作线程,c#,asp.net-core,C#,Asp.net Core,我们的应用程序在ASP.NETCore3.0项目中获取工作线程/池线程时遇到延迟 在较新的语言中,这意味着在生成任务时,Task.Start()命令与执行任务中的第一行代码之间的时间量是有效的。实际上,线程池管理过程创建线程所需的时间 要记住的一些因素: 在询问时,有600多个空闲工作线程/池线程 执行此操作的代码位于ASP.Net Core 3.0主机应用程序引用的.Net Framework 4.7.2应用程序中 延迟并不总是存在的,但当延迟存在时,从同一个4.7.2组件请求工作线程的所有项

我们的应用程序在ASP.NETCore3.0项目中获取工作线程/池线程时遇到延迟

在较新的语言中,这意味着在生成任务时,Task.Start()命令与执行任务中的第一行代码之间的时间量是有效的。实际上,线程池管理过程创建线程所需的时间

要记住的一些因素:

  • 在询问时,有600多个空闲工作线程/池线程

  • 执行此操作的代码位于ASP.Net Core 3.0主机应用程序引用的.Net Framework 4.7.2应用程序中

  • 延迟并不总是存在的,但当延迟存在时,从同一个4.7.2组件请求工作线程的所有项目都会受到延迟的影响。时间不同,但我似乎有300毫秒

  • 应用程序当时没有处于重载状态,内存使用率和CPU使用率处于正常水平

  • 请求辅助线程/池线程的代码以.Net 1.1样式执行:

  • 我们在Program.cs的void Main中发出此命令:

  • 我认为你使用ThreadPool是为了它不应该被使用的东西。这是官方的说法,很可能也适用于.Net Framework 4:

    当不使用线程池线程时

    在以下场景中,创建和管理自己的线程而不是使用线程池线程是合适的:

  • 您需要在很短的时间内启动多个线程,以执行持续一秒或更长时间的任务。作为线程管理策略的一部分,线程池在创建线程之前会延迟。因此,当许多任务在短时间内排队时,在所有任务开始之前可能会有明显的延迟

  • 您的帖子表明您希望排队操作能够有效地同步?或者至少是获取线程/对您来说什么是“工作线程”?“获取工作线程时的延迟”是什么意思?请注意,理想的线程数是每个core+1个(异步/硬件/IO线程)。添加更多线程不会使您的机器更快(相反,因为系统需要切换等)。@SimonMourier工作线程是线程池线程,即我发布的代码中设置的线程。请阅读此处了解背景信息:@SimonMourier出于同样的原因,您可能会关心应用程序使用了多少内存,或者使用了多少CPU时间。您可能不在乎,但对于一个无人值守、长时间运行、运行多个进程的服务器应用程序来说,毫无疑问,可能会出现错误,导致重复进程泄漏内存,或产生无法退出的任务,从而导致池线程泄漏。@SimonMourier我也认为您从根本上误解了这个问题;你似乎认为我在问运行线程的性能。事实并非如此,问题也很清楚:我在问为什么线程池上的线程调度在这个特定实例中会受到如此严重的延迟,我已经尽力描述了这一点。但这只发生在这个Asp.Net Core 3应用程序上。多年来,我们在.Net Framework主机应用程序中使用了相同的代码,但没有出现此问题。在这种情况下,对新线程的调用也不是特别高,因此延迟很难解释。
        System.Threading.ThreadPool.QueueUserWorkItem(MethodName, e);
    
        ThreadPool.SetMinThreads(1000, 1000);