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

时间:2018-12-24 20:40:26

标签: c# rest dotnet-httpclient

问题:

我正在使用.NET类AsyncStorage.getItem('userToken').then((token) => { this.setState({hasToken: token !== null,localToken : token}) }); 向端点URL发出请求。

我的代码:

HttpClient

已确定问题:

如果我使用using (HttpClient apiClient1 = new HttpClient()) { apiClient.GetAsync(apiUrl).Result; } 块,则表示我正在打开多个连接,并指向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); } } 设为HttpClient后,上述代码的结果如下:

  1. 仅建立了一个连接。

  2. 对于每个请求,我都希望减少200毫秒     响应时间。

我需要什么:

我想通过高速响应拨打至少50个电话到终点。

在这种情况下请帮助我。

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

HttpClient的默认SSL连接空闲超时为2分钟。因此,在那之后,您必须与服务器重新握手。这可能是根本原因。

您可以按照本文(https://www.stevejgordon.co.uk/httpclient-connection-pooling-in-dotnet-core)来延长超时时间。但是从我这边的测试结果来看,我只能延长5分钟。之后,连接将关闭。