每次请求simultan请求时,HttpWebRequest时间都会增加

时间:2014-10-05 19:22:38

标签: c# .net http httpwebrequest

我遇到了HttpWebRequest的问题。我试图同时向同一台服务器发送多个请求。 当我检查响应的时间时,我发现它们没有花费相同的时间,而是随着每个请求而增加。

到目前为止我的代码:

public static void Main()
{
    ServicePointManager.Expect100Continue = false;
    ServicePointManager.UseNagleAlgorithm = false;
    ServicePointManager.DefaultConnectionLimit = 1000;
    while(true)
    {
        List<Task> tasks = new List<Task>();

        for (int currency = 1; currency <= 4; currency++)
        {
            tasks.Add(Task.Factory.StartNew(async () =>
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("theurl"));
                request.Method = "GET";
                request.Host = "thehost";
                request.UserAgent = "Mozilla";
                request.Accept = "*/*";
                request.Headers.Add("Content-Encoding", "gzip");
                request.AutomaticDecompression = DecompressionMethods.GZip;
                request.KeepAlive = false;
                request.Proxy = null;

                long t1 = DateTime.Now.Ticks;
                var response = await request.GetResponseAsync();
                Stream receiveStream = response.GetResponseStream();
                BufferedStream buffer = new BufferedStream(receiveStream);
                StreamReader reader = new StreamReader(buffer, Encoding.UTF8);

                var result = reader.ReadToEnd();
                long t2 = DateTime.Now.Ticks;
                var whatweneed = JSON.Parse(result).At("whatweneed");
                Console.Write(whatweneed + " : ");
                Console.WriteLine((t2 - t1) / 10000.0);
            }));
        }

        Thread.Sleep(1000);
        Task.WaitAll(tasks.ToArray());
        Console.WriteLine();
    }
    Console.ReadKey();
}

结果如下:

whatweneed : 70.000  
whatweneed : 76.334  
whatweneed : 84.453  
whatweneed : 90.873  

whatweneed : 73.840
whatweneed : 78.294
whatweneed : 85.953
whatweneed : 92.945

whatweneed : 67.034
whatweneed : 72.452
whatweneed : 79.934
whatweneed : 88.881

怎么可能???这种行为背后的概念是什么?

更新代码

public static void Main()
    {
    ServicePointManager.Expect100Continue = false;
    ServicePointManager.UseNagleAlgorithm = false;
    ServicePointManager.DefaultConnectionLimit = 1000;
    while(true)
    {
        List<Task> tasks = new List<Task>();
        for (int value = 1; value <= 4; value++)
        {
            tasks.Add(Task.Factory.StartNew(() =>
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("theurl"));
                request.Method = "GET";
                request.Host = "thehost";
                request.UserAgent = "Mozilla";
                request.Accept = "*/*";
                request.Headers.Add("Content-Encoding", "gzip");
                request.AutomaticDecompression = DecompressionMethods.GZip;
                request.KeepAlive = false;
                request.Proxy = null;

                using (Stream receiveStream = request.GetResponse().GetResponseStream())
                {
                    long t1 = DateTime.Now.Ticks;
                    using(BufferedStream buffer = new BufferedStream(receiveStream))
                    {
                        using (StreamReader reader = new StreamReader(buffer, Encoding.UTF8))
                        {
                            var result = reader.ReadToEnd();
                            long t2 = DateTime.Now.Ticks;
                            var whatweneed = JSON.Parse(result).At("whatweneed");
                            Console.Write(listing + " : ");
                            Console.WriteLine((t2 - t1) / 10000.0);
                        }
                    }
                }
            }));
        }
        Thread.Sleep(250);
        Task.WaitAll(tasks.ToArray());
        Console.WriteLine();
    }
    Console.ReadKey();
}

结果:仍然相同:(

更新,i = 10

whatweneed : 100,5859
whatweneed : 103,5156
whatweneed : 106,4453
whatweneed : 109,375
whatweneed : 112,3047
whatweneed : 116,2109
whatweneed : 119,1406
whatweneed : 121,0938
whatweneed : 101,5625
whatweneed : 101,5625

whatweneed : 107,4219
whatweneed : 111,3281
whatweneed : 113,2813
whatweneed : 117,1875
whatweneed : 120,1172
whatweneed : 123,0469
whatweneed : 126,9531
whatweneed : 128,9063
whatweneed : 92,7735
whatweneed : 92,7734

看起来有点奇怪,时间提升然后第9或第10次看起来再次“正常”? 但在主要实现中,我只会同时发送4个请求,然后使用它们,并在2-3秒之后再次执行。

0 个答案:

没有答案