微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP.NET Core 3.1响应缓慢

如何解决ASP.NET Core 3.1响应缓慢

我有一个使用MVC控制器的标准ASP.NET Core 3.1 API应用程序。该代码非常简单,可以从控制器向MongoDb进行查询以检索文档。这是快速的,几乎可以。但是,当我打开诊断程序时,我发现请求花费的时间远远超过了应有的时间,控制器在177ms处完成了工作,而最终请求在1068ms处完成,响应为204。有关更多信息,请参见下文。

2020-09-22 18:16:48.5629|2|INFO|Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker|
Executed action method MyProject.API.Controllers.MyController.Post (MyProject.API),returned result Microsoft.AspNetCore.Mvc.StatusCodeResult in 177.3325ms.

2020-09-22 18:16:48.5938|4|TRACE|Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker|
Before executing action result Microsoft.AspNetCore.Mvc.StatusCodeResult.

2020-09-22 18:16:48.6289|1|INFO|Microsoft.AspNetCore.Mvc.StatusCodeResult|
Executing HttpStatusCodeResult,setting HTTP status code 204

2020-09-22 18:16:48.6430|5|TRACE|Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker|
After executing action result Microsoft.AspNetCore.Mvc.StatusCodeResult.

2020-09-22 18:16:48.6754|2|INFO|Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker|
Executed action MyProject.API.Controllers.MyController.Post (MyProject.API) in 735.1339ms

2020-09-22 18:16:48.6962|1|INFO|Microsoft.AspNetCore.Routing.EndpointMiddleware|
Executed endpoint 'MyProject.API.Controllers.MyController.Post (MyProject.API)'

2020-09-22 18:16:48.7031|37|TRACE|Microsoft.AspNetCore.Server.Kestrel|
Connection id "0HM2V3CUT1GMI" sending HEADERS frame for stream 
ID 15 with length 53 and flags END_STREAM,END_HEADERS

2020-09-22 18:16:48.7031||2|INFO|Microsoft.AspNetCore.Hosting.Diagnostics|
Request finished in 1068.2472ms 204

那大约相差890毫秒! 以上结果来自冷实例,因此这是第一个收到的请求。 在温暖的情况下,差异仍然很明显(但规模不同)。

2020-09-22 18:24:24.9553|2|INFO|Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker|
Executed action method MyProject.API.Controllers.MyController.Get (MyProject.API),returned result Microsoft.AspNetCore.Mvc.StatusCodeResult in 11.4986ms.

2020-09-22 18:24:24.9553|4|TRACE|Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker|
Before executing action result Microsoft.AspNetCore.Mvc.StatusCodeResult.

2020-09-22 18:24:24.9553|1|INFO|Microsoft.AspNetCore.Mvc.StatusCodeResult|
Executing HttpStatusCodeResult,setting HTTP status code 204

2020-09-22 18:24:24.9553|5|TRACE|Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker|
After executing action result Microsoft.AspNetCore.Mvc.StatusCodeResult.

2020-09-22 18:24:24.9553|2|INFO|Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker|
Executed action MyProject.API.Controllers.MyController.Get (MyProject.API) in 36.8809ms

2020-09-22 18:24:24.9553|1|INFO|Microsoft.AspNetCore.Routing.EndpointMiddleware|
Executed endpoint 'MyProject.API.Controllers.MyController.Get (MyProject.API)'

2020-09-22 18:24:24.9553|37|TRACE|Microsoft.AspNetCore.Server.Kestrel|
Connection id "0HM2V3CUT1GMK" sending HEADERS frame for stream 
ID 1 with length 53 and flags END_STREAM,END_HEADERS

2020-09-22 18:24:24.9553|2|INFO|Microsoft.AspNetCore.Hosting.Diagnostics|
Request finished in 124.9982ms 204

我不明白的是为什么ASP.NET Core ControllerActionInvoker和Kestrel花费这么多时间将响应返回!两者之间没有任何自定义,只是本地代码。有什么建议吗?

作为旁注,我已经实现了一个预热任务,该任务加载了应用程序启动时的所有依赖项。我还删除了不必要的过滤器,输入和输出格式化程序以及值提供程序,因此,以上结果是我迄今为止所取得的最好成绩。为什么ASP.NET Core在从控制器返回响应到将响应写入I / O并使其通过网络飞行之间如此缓慢?

我是否必须在Kestrel中进行配置?我必须在MVC配置中进行一些改进吗?

最后,请注意,上面的代码已优化,可在发行版上运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。