[从ASP.NET迁移到.NET Core,我的API现在非常慢。我该怎么诊断?

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

我刚刚将一个相当老的API(开发工作始于2000年代初期)迁移到.Net Core。我在环境中不是很舒服,但是我设法使其正常工作,并且似乎可以更轻松地完成诸如设置CORS / Http Verb路由之类的简单操作。我唯一的问题是请求有时会占用一个需要很长时间才能完成。 (例如50秒),而之前会很快。

我正在尝试找出问题所在,因为它不会每次都遇到相同的请求,有时效果很好。有人对我如何诊断阻止API响应的方法有任何建议吗?

以下是请求的日志:

Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executing action method MyProject.Controllers.APILogTypeListController.GetTypes (MyProject) with arguments (48, 976669608310E6D3C1227DE232D2, MyProject.Controllers.APILogTypeListController+GetTypesParams) - Validation state: Valid
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action method MyProject.Controllers.APILogTypeListController.GetTypes (MyProject), returned result Microsoft.AspNetCore.Mvc.ObjectResult in 16.686ms.
Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor:Information: Executing ObjectResult, writing value of type 'Microsoft.AspNetCore.Mvc.ObjectResult'.
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action MyProject.Controllers.APILogTypeListController.GetTypes (MyProject) in 51770.6555ms
Microsoft.AspNetCore.Hosting.Internal.WebHost: Information: Request finished in 51896.7416ms 200 application / json; charset = utf - 8

您可以看到此特定请求花了51秒才能完成。

这是控制器当前的动作:

// Just for passing body params into the action
public class GetTypesParams {
  public string field;
  public string order;
  public int page;
  public int max;
}

[HttpPost("{id}/{key}")] // <- Matches route APILogTypeListController/GetTypes/{id}/{key}
public IActionResult GetTypes(int id, string key, [FromBody]GetTypesParams bodyParams)
{
    //Controller Logic ......... 
    return StatusCode(200, myResponseJSON);
}

并且为了进行比较,这就是迁移之前原始控制器的行为:

public void GetTypes(int id, string key, [FromBody]string field, [FromBody]string order, [FromBody]int page, [FromBody]int max)
{
    //Controller Logic ......... 
    response.Clear();
    response.BufferOutput = false;
    response.StatusCode = 200;
    response.Write(myResponseJSON);
    response.End();
}

我不知道是否与它有关:

  • 新的Kestrel服务器
  • 属性路由
  • new ObjectResult
  • Somehow .Net Core影响控制器与数据库的交互延迟实际上是在调用控制器方法之前发生的,因此这不是延迟。
  • ???

[如果有人可以向我提供有关应用程序的哪个部分可能导致问题以及如何进一步调试/查看该问题的信息,我将不胜感激。现在,我将开始一次运行控制器动作1,并查看请求中的任何更改是否会影响任何内容。

c# asp.net asp.net-core asp.net-apicontroller
1个回答
0
投票

您能做的最好的事情是使用Application Insights对应用程序进行检测,并挖掘缓慢的请求以弄清它在哪里花费了很多时间。

我的猜测:您可能有一些中间件,有时会影响请求的持续时间。不知道您的应用程序,很难说,但这应该使您处于正确的方向

© www.soinside.com 2019 - 2024. All rights reserved.