I am trying to measure the throughput of a webservice.
In order to do that, I have written a small tool that continuously sends requests and reads responses from a number of threads.
The contents of the inner loop of each thread looks like this:
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(); } }
It seems to work okay, except that something seems to be limiting the tool. If I run two instances of the tool with each 40 threads, I get significantly more throughput than one instance with 80 threads.
I found the ServicePointManager.DefaultConnectionLimit property, which I set to 10000 (and it makes no difference if I set it through app.config as suggested by Jader Dias).
Are there any other settings in .NET or on my machine that can influence the performance? (I am running Vista, but I see the same problem on Windows Server 2003).
Perhaps some restrictions on how many connections a single process can make?
You must set the maxconnection parameter at the app.config or web.config file:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.net> <connectionManagement> <add address="*" maxconnection="80"/> </connectionManagement> </system.net> </configuration>
Values up to 100 work very well with Windows XP.
Update: I just found out that the method above is an alternative way to set the System.Net.ServicePointManager.DefaultConnectionLimit
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With