Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Core 3.1响应缓慢_C#_.net_Asp.net Mvc_Asp.net Core_Kestrel Http Server - Fatal编程技术网

C# ASP.NET Core 3.1响应缓慢

C# ASP.NET Core 3.1响应缓慢,c#,.net,asp.net-mvc,asp.net-core,kestrel-http-server,C#,.net,Asp.net Mvc,Asp.net Core,Kestrel Http Server,我有一个标准的ASP.NET Core 3.1 API应用程序,它使用MVC控制器。代码非常简单,从控制器开始,代码对MongoDb进行查询以检索文档。这很快,也很好。然而,当我打开诊断时,我发现请求花费的时间比它应该花费的时间要长得多,控制器在177ms时完成其工作,而最终请求在1068ms时完成,响应为204。有关更多信息,请参见下文 2020-09-22 18:16:48.5629|2|INFO|Microsoft.AspNetCore.Mvc.Infrastructure.Control

我有一个标准的ASP.NET Core 3.1 API应用程序,它使用MVC控制器。代码非常简单,从控制器开始,代码对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毫秒! 以上结果来自一个冷实例,因此这是收到的第一个请求。 在温暖的情况下,差异仍然显著(但不在同一尺度上)

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

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

我必须在Kestrel中配置一些东西吗?我必须改进MVC配置吗


最后,作为旁注,上面的代码经过优化,在发布版本上运行。

所以真正的问题是,为什么诊断会减慢我的查询速度?如果没有诊断,查询和响应是否与预期一样快?你能给我们看一下设置诊断并执行查询而不是日志输出的实际代码吗?没用。不幸的是,我也禁用了诊断功能,并使用New Relic来收集指标。我的反应还是很慢。即使我注释掉执行查询的代码并简单地返回一个结果,它仍然很慢。ASP.NET核心上的这两个github问题是相关的:。在第一个例子中,一位贡献者建议端点路由,这很好,但首先为什么MVC框架这么慢?综上所述,MVC不推荐用于低延迟需求的应用程序。当我说慢的时候,我的意思是它需要比它应该需要的更多。我的目标是,在没有看到任何代码的情况下,很难对您看到的计时内容进行评论。问题链接是关于MVC增加40毫秒开销的人。如果不知道他们在40毫秒内反序列化和验证什么参数,很难判断这是否是一个实际问题。像wise一样,您也没有显示任何代码,因此很难判断您看到了什么。@gdyrrahis您找到解决方案了吗?我正在与类似的问题作斗争,任何大小超过100KB的响应都非常慢。
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