Улучшение производительности многопоточных HttpWebRequests в .NET

Я пытаюсь измерить пропускную способность веб-службы.

Для этого я написал небольшой инструмент, который непрерывно отправляет запросы и читает ответы из нескольких потоков.

Содержимое внутреннего цикла каждого потока выглядит так:

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();
  }      
}

Кажется, все работает хорошо, за исключением того, что что-то ограничивает инструмент. Если я запускаю два экземпляра инструмента с каждыми 40 потоками, я получаю значительно большую пропускную способность, чем один экземпляр с 80 потоками.

Я нашел свойство ServicePointManager.DefaultConnectionLimit, которое я установил на 10000 (и не имеет значения, если я установлю его через app.configкак предложено Джадером Диасом).

Есть ли другие параметры в .NET или на моем компьютере, которые могут повлиять на производительность? (Я использую Vista, но вижу такую ​​же проблему в Windows Server 2003).

Возможно, есть некоторые ограничения на количество соединений, которые может установить один процесс?

Ответы на вопрос(6)

Ваш ответ на вопрос