性能问题:.NET HttpClient响应很慢

Vik*_*ash -1 c# rest dotnet-httpclient

问题:

我正在使用.NET类HttpClient向端点URL发出请求.

我的代码:

using (HttpClient apiClient1 = new HttpClient())
{
    apiClient.GetAsync(apiUrl).Result;
}
Run Code Online (Sandbox Code Playgroud)

问题已识别:

如果我使用using块,我打开多个连接,导致socketExceptions.

将我的上述代码更改为:

public class RequestController: ApiController
{
    private static HttpClient apiClient = new HttpClient();

    [HttpPost]
    public  dynamic GetWebApiData([FromBody] ParamData params)
    {
           var resultContent = apiClient.GetAsync(apiUrl).Result.Content;
           return Newtonsoft.Json.JsonConvert.DeserializeObject<object>(resultContent.ReadAsStringAsync().Result);
    }
}
Run Code Online (Sandbox Code Playgroud)

使后上面的代码的结果HttpClientstatic如下:

  1. 仅建立一个连接.

  2. 对于每个请求,我正在寻找响应时间减少200毫秒.

我需要的:

我希望通过高速响应以至少50次调用终点来进行并发呼叫.

请帮助我解决这个问题.

Nko*_*osi 8

使用异步API并停止调用.Result阻塞调用.

public class RequestController: ApiController {
    private static HttpClient apiClient = new HttpClient();

    [HttpPost]
    public async Task<IHttpActionResult> GetWebApiData([FromBody] ParamData data) {
        var response = await apiClient.GetAsync(apiUrl);
        var resultContent = response.Content;
        var model = await resultContent.ReadAsAsync<dynamic>();
        return Ok(model);
    }
}
Run Code Online (Sandbox Code Playgroud)