Я пытаюсь измерить пропускную способность веб-службы.
Для этого я написал небольшой инструмент, который непрерывно отправляет запросы и читает ответы от нескольких потоков.
Содержимое внутреннего цикла каждого потока выглядит следующим образом:
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 как было предложено Jader Dias).
Есть ли другие настройки в .NET или на моей машине, которые могут влиять на производительность? (Я запускаю Vista, но я вижу ту же проблему в Windows Server 2003).
Возможно, некоторые ограничения на количество соединений, которые может сделать один процесс?