优先考虑 Kestrel 的响应能力而不是后端逻辑

问题描述 投票:0回答:1

当.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的使用就越多...

c# .net asp.net-core kestrel-http-server
1个回答
0
投票

首先我要说的是,你的方法本质上是非常值得怀疑的。

也就是说,我建议从

Task.Run
切换到旧的
Thread.Start
,您可以在其中轻松指定线程的 priproty:

Thread t = new Thread(() => {/* your code */ });
t.Priority = ThreadPriority.Lowest;
t.Start();
© www.soinside.com 2019 - 2024. All rights reserved.