c# - 在 ASP .Net Core 3.0 项目中延迟获取工作线程
问题描述
在 ASP .Net Core 3.0 项目中获取工作线程/池线程时,我们的应用程序遇到延迟。
在较新的语言中,这实际上意味着在生成任务时,Task.Start() 命令与执行任务的第一行代码之间的时间量。本质上是线程池管理进程创建线程所花费的时间。
需要记住的一些因素:
在询问时,有 600 多个免费工作线程/池线程。
执行此操作的代码位于 ASP .Net Core 3.0 主机应用程序引用的 .Net Framework 4.7.2 应用程序中。
并不总是有延迟,但是当有延迟时,所有从同一个 4.7.2 组件请求工作线程的项目都会受到它的影响。时间各不相同,但我似乎是 300 毫秒。
该应用程序当时没有承受重负载,内存使用率和 CPU 使用率处于正常水平。
请求工作线程/池线程的代码以 .Net 1.1 样式执行:
System.Threading.ThreadPool.QueueUserWorkItem(MethodName, e);
- 我们在 Program.cs 的 void Main 中发出此命令:
ThreadPool.SetMinThreads(1000, 1000);
解决方案
我认为您将 ThreadPool 用于不应该使用的东西。这是Silverlight 官方文档所说的,这很可能也适用于 .Net Framework 4:
何时不使用线程池线程
在以下场景中,最好创建和管理自己的线程,而不是使用线程池线程:
- 您需要在很短的时间内启动多个线程,以执行持续一秒或更长时间的任务。作为其线程管理策略的一部分,线程池在创建线程之前会延迟。因此,当许多任务在短时间内排队时,在所有任务启动之前可能会有很大的延迟。
推荐阅读
- amazon-web-services - 将 Api-Gateway 列入白名单以使用 WAF 访问 ALB
- javascript - 在具有相同href的多个锚点中获取锚点文本值
- javascript - Javascript 和 Jquery - 在 $.get running 中获取类定义
- android - how to reformat date in android studio
- serverless - 我们如何将 Nimbella 中的项目部署到任何公共云平台?
- c# - 使用 azure 的 SignAsync 方法签署自定义创建的 JWT 格式令牌并离线验证
- c# - 赶上一个新添加的项目
- moodle - 在系统级别将用户分配给学生角色
- azure - 天蓝色云中的 Automation Anywhere 社区版
- quire-api - 检索 Quire API 的访问令牌 - unsupported_grant_type