I have implemented a simple method that periodically polls a service in order to get the public IP address.
Stopwatch sw = new Stopwatch();
while (true)
{
Console.WriteLine("(HttpWebRequest)WebRequest.Create...");
sw.Restart();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://checkip.dyndns.org/");
sw.Stop();
Console.WriteLine("HttpWebRequest was created in {0} ms", sw.ElapsedMilliseconds);
request.Proxy = null;
sw.Restart();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
sw.Stop();
Console.WriteLine("Response was received in {0} ms", sw.ElapsedMilliseconds);
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseStr = sr.ReadToEnd().Trim();
string ipStr = (new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")).Matches(responseStr)[0].ToString();
IPAddress address = IPAddress.Parse(ipStr);
Console.WriteLine("IP: {0}", address.ToString());
}
Console.WriteLine();
Thread.Sleep(60000);
}
The method WebRequest.Create takes nearly 10 seconds to create the HttpWebRequest for the first time, while on subsequent calls the same instance is created almost instantaneously. What are the reasons for this behavior?
UPDATE. Here is my output when I launch the executable (release mode) from Visual Studio.
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 9758 ms
Response was received in 683 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 617 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 1034 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 641 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 652 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 672 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 658 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 655 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 1067 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 651 ms
(HttpWebRequest)WebRequest.Create...
HttpWebRequest was created in 0 ms
Response was received in 643 ms
Edit:
I'm using Windows 7 SP1 32-bit on a computer with 2 GB of RAM, Intel Core 2 Duo T7500, connection speed at 7 Mbps in download and 640 Kbps in upload.