当.NET Core应用程序使用Kestrel服务器来服务基本的Web应用程序并且在同一个可执行文件中的逻辑(在不同的线程中)可能会耗尽后台的CPU(这本身不是错误)时,有没有办法为 Kestrel 相关的任何事物分配更高的优先级?
我能想到的一种方法是为逻辑和主机2个具有不同优先级的进程使用单独的可执行文件,但也许有一种方法可以将其放在一个文件中?
问题是,当CPU利用率接近100%时,服务器需要更多时间来响应请求。
为了完整起见:
namespace WebApplication1
{
public class Program
{
public static Action runAction => new Action(() =>
{
for (int i = 0; i < int.MaxValue; i++)
{
for (int x = 0; x < int.MaxValue; x++)
{
}
}
});
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => { Task.Run(runAction); return "Hello World!"; });
app.Run();
}
}
}
保重: 访问页面的次数越多,cpu的使用就越多...
首先我要说的是,你的方法本质上是非常值得怀疑的。
也就是说,我建议从
Task.Run
切换到旧的 Thread.Start
,您可以在其中轻松指定线程的 priproty:
Thread t = new Thread(() => {/* your code */ });
t.Priority = ThreadPriority.Lowest;
t.Start();