提问人:Hentov 提问时间:7/22/2018 最后编辑:Hentov 更新时间:9/18/2023 访问量:4996
ASP.NET Core MVC 响应缓慢生成
ASP.NET Core MVC Slow response generation
问:
我有一个 ASP.NET Core MVC Web应用程序,它有一个端点,它以json的形式返回一些数据。最主要的问题是,我的数据大约是 5 MB 的原始(非缩进)JSON,并且响应需要很长时间。
我设置了一些指标,发现平均而言,我的应用程序执行的处理大约需要 30 毫秒。然而,整个响应在超过 250 毫秒后返回。
我正在使用计算机上运行的应用程序的本地实例进行测试,并使用 postman 发送 get 请求,因此网络延迟最小。
这是我的控制器的样子
[HttpGet("getData")]
public IActionResult GetData()
{
Stopwatch sw = Stopwatch.StartNew();
long a, b, c;
var data = this._cacheInternal.GetValidDataSet();
a = sw.ElapsedMilliseconds;
sw.Restart();
var processedData = this.ProcessData(data, false);
b = sw.ElapsedMilliseconds;
sw.Restart();
var serialized = JsonConvert.SerializeObject(processedData);
c = sw.ElapsedMilliseconds;
this._log.Info($"Data: {a} ms. Processing {b} ms. Serialization {c} ms.");
return this.Ok(serialized);
}
这是我在检查 AspNetCore 日志时发现的内容。
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/api/status/getData
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
Route matched with {action = "GetData", controller = "Status"}. Executing action DemoApp.Controllers.StatusController.GetData (DemoApp)
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
Executing action method DemoApp.Controllers.StatusController.GetData (DemoApp) - Validation state: Valid
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
Executed action method DemoApp.Controllers.StatusController.GetData (DemoApp), returned result Microsoft.AspNetCore.Mvc.OkObjectResult in 31.4532ms.
info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
Executing ObjectResult, writing value of type 'System.String'.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
Executed action DemoApp.Controllers.StatusController.GetData (DemoApp) in 69.2546ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Request finished in 175.2726ms 200 text/plain; charset=utf-8
此请求的秒表日志记录如下:
Data: 1 ms. Processing 19 ms. Serialization 10 ms.
正如您从我的控制器的日志中看到的那样:
。返回结果 Microsoft.AspNetCore.Mvc.OkObjectResult 在 31.4532 毫秒内。
这与我的秒表指标相匹配,并且是应用程序实际执行我的代码的时间量。
从那里开始,ASP接管了另外两点:
在 69.2546 毫秒内执行操作 DemoApp.Controllers.StatusController.GetData (DemoApp)
请求在 175.2726ms 200 文本/纯文本中完成;字符集=utf-8
所以我的问题是,在 ASP 获取我传递给的结果后,我怎样才能找出这两个时间点发生了什么,这需要很多时间(并修复它)this.Ok()
同样,我返回的响应非常大(对于此示例,1.2MB 原始 JSON)。但我不明白是什么导致了这么长的延迟(鉴于我所做的序列化只需要 10 毫秒)
我正在使用 ASP.NET Core MVC 并以 .NET Core 2.1 为目标。该应用程序由 Kestrel 托管。
答: 暂无答案
评论
map
use