C # Comment définir HttpClient Keep-Alive sur false

J'ai eu un faible rendement problème avec les requêtes HTTP sur .NET. La demande HTTP GET à une API REST sur le localhost a pris environ 500 ms pour terminer. J'ai passé beaucoup de temps pour y remédier. J'ai essayé de nombreuses façons: HttpClientHttpWebRequestWebClient et RestSharp. Aucune de ces travaux. La plupart des solutions sur Internet, a déclaré à définir Proxy paramètre null mais cela ne fonctionne toujours pas plus rapide.

La seule façon que j'ai trouvée pour réduire ce temps d'attente est de définir le Keep-Alive paramètre de la demande pour de faux:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Cela fonctionne très bien. Le temps est réduit à 7 à 10 ms. Mais maintenant, dans certaines raisons, j'ai besoin d'utiliser HttpClient au lieu de HttpWebRequest. Et je ne trouve pas comment définir Keep-Alive " à false pour HttpClient. La seule chose que j'ai trouvé est de savoir comment l'activer par la définition d'une "connexion" en-tête "Keep-Alive".

Je suis en utilisant ce code pour la requête POST par HttpClient:

        HttpClient _http = new HttpClient();
        _http.DefaultRequestHeaders.Accept.Clear();
        _http.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
        _http.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");

        var content = new StringContent(
            request, Encoding.UTF8, "application/%appname%+xml");
        content.Headers.ContentType.Parameters.Add(
            new NameValueHeaderValue("type", "payload"));

        HttpResponseMessage response = await _http.PostAsync(uri, content);

Et encore, il faut environ 500-600 ms pour terminer.

source d'informationauteur Vaskrol