为什么这个HttpWebRequest在C#中变慢

时间:2015-05-10 12:13:19

标签: c# visual-studio-2013 httpwebrequest

我正在使用此代码执行简单的REST请求。 (代码主要来自这个q:How to post JSON to the server?)。

为什么这么慢?我正在使用VS 2013,第一次尝试需要大约15秒,然后大约需要4秒。在后续尝试中,但在另一种语言(Delphi)中,我可以发出一个http请求,并且一致地花费大约1秒。

        var request = (HttpWebRequest)WebRequest.Create("http://jsonplaceholder.typicode.com/posts");
        request.ContentType = "application/json";
        request.Method = "POST";
        request.ServicePoint.Expect100Continue = false;

        using (var streamWriter = new StreamWriter(request.GetRequestStream()))
        {
            string json = new JavaScriptSerializer().Serialize(new
            {
                title = "foo",
                body = "bar",
                userId = "1"
            }); 
            streamWriter.Write(json);
        }

        var response = (HttpWebResponse)request.GetResponse();
        using (var streamReader = new StreamReader(response.GetResponseStream()))
        {
            var result = streamReader.ReadToEnd();
            textBox1.Text = result;
        }

P.S。您可以自己测试此代码,它只是在上面的URL上使用来自Internet的测试REST服务器。

1 个答案:

答案 0 :(得分:2)

  

第一次尝试是什么意思?这意味着我离开电脑一段时间后的第一次尝试

在到达服务器之前,有一个查找服务器IP地址的过程。此过程称为Dns Resolution

首次,您的应用程序必须完成 Dns Resolution 的过程才能找到IP地址。解析IP地址后,IP地址将缓存在本地计算机中。

因此,进一步的调用不会经历 Dns Resolution 的过程;它可以使用缓存的IP。一段时间后,缓存将被删除,您将再次访问DNS服务器以解析IP地址。

这是我能提出的唯一解释,因为你注意到的延迟。每当您注意到延迟时,这可能意味着您只是因为它是第一次或缓存过期而再次访问Dns服务器。

  

为什么它在其他环境中更快(Delphi)?

对不起,我无法找到理由。