L'amélioration de la performance de multithread HttpWebRequests dans .NET

Je suis en train d'essayer de mesurer le débit d'un webservice.

Pour ce faire, j'ai écrit un petit outil qui envoie en permanence des demandes et lit les réponses d'un nombre de threads.

Le contenu de la boucle interne de chaque thread ressemble à ceci:

public void PerformRequest()
{
  WebRequest webRequest = WebRequest.Create(_uri);

  webRequest.ContentType = "application/ocsp-request";
  webRequest.Method = "POST";
  webRequest.Credentials = _credentials;
  webRequest.ContentLength = _request.Length;
  ((HttpWebRequest)webRequest).KeepAlive = false;

  using (Stream st = webRequest.GetRequestStream())
    st.Write(_request, 0, _request.Length);

  using (HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse())
  using (Stream responseStream = httpWebResponse.GetResponseStream())
  using (BufferedStream bufferedStream = new BufferedStream(responseStream))
  using (BinaryReader reader = new BinaryReader(bufferedStream))
  {
    if (httpWebResponse.StatusCode != HttpStatusCode.OK)
      throw new WebException("Got response status code: " + httpWebResponse.StatusCode);

    byte[] response = reader.ReadBytes((int)httpWebResponse.ContentLength);
    httpWebResponse.Close();
  }      
}

Il semble fonctionner ok, sauf que quelque chose semble être un facteur limitant de l'outil. Si je exécuter deux instances de l'outil à chaque 40 fils, je reçois beaucoup plus de débit qu'une seule instance avec 80 fils.

J'ai trouvé le ServicePointManager.DefaultConnectionLimit bien, que j'ai mis à 10000 (et il ne fait aucune différence si je l'ai mis à partir de l'app.config comme suggéré par Jader Dias).

Existe-il d'autres paramètres .NET ou sur ma machine qui peuvent influencer la performance? (Je suis sous Vista, mais je vois le même problème sur Windows Server 2003).

Peut-être certaines restrictions sur le nombre de connexions d'un seul processus peut faire?

  • Je sais que cette question est à partir de '08, mais vous pouvez être intéressé par certains des nouveaux le parallélisme des fonctions de .net 4.5
  • ceux parallélisme fonctionnalités sera plus facile à mettre en œuvre la solution, mais ils ne suffiront pas à résoudre le problème de la DefaultConnectionLimit.
InformationsquelleAutor Rasmus Faber | 2008-12-23