Web サービスのスループットを測定しようとしています。
そのために、リクエストを継続的に送信し、多数のスレッドからレスポンスを読み取る小さなツールを作成しました。
各スレッドの内部ループの内容は次のようになります。
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();
}
}
何かがツールを制限しているように見えることを除いて、問題なく動作しているようです。ツールの 2 つのインスタンスを 40 スレッドごとに実行すると、80 スレッドの 1 つのインスタンスよりもスループットが大幅に向上します。
ServicePointManager.DefaultConnectionLimit プロパティを見つけました。これを 10000 に設定しました ( Jader Dias の提案に従ってapp.config で設定しても違いはありません)。
.NET または私のマシンに、パフォーマンスに影響を与える可能性のある他の設定はありますか? (Vista を実行していますが、Windows Server 2003 でも同じ問題が発生します)。
おそらく、単一のプロセスが確立できる接続の数にいくつかの制限がありますか?