Melhorando o desempenho de HttpWebRequests multithread no .NET

Estou tentando medir a taxa de transferência de um serviço da web.

Para fazer isso, escrevi uma pequena ferramenta que envia continuamente solicitações e lê respostas de vários segmentos.

O conteúdo do loop interno de cada thread é assim:

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

Parece funcionar bem, exceto que algo parece estar limitando a ferramenta. Se eu executar duas instâncias da ferramenta a cada 40 threads, obterá um rendimento significativamente maior do que uma instância com 80 threads.

Encontrei a propriedade ServicePointManager.DefaultConnectionLimit, que defini como 10000 (e não faz diferença se configurá-la por meio do app.configcomo sugerido por Jader Dias)

Existem outras configurações no .NET ou na minha máquina que possam influenciar o desempenho? (Estou executando o Vista, mas vejo o mesmo problema no Windows Server 2003).

Talvez algumas restrições sobre quantas conexões um único processo pode fazer?

questionAnswers(6)

yourAnswerToTheQuestion