HttpWebRequest或Webclient更快

时间:2014-04-01 16:18:38

标签: c# get httpwebrequest webclient

我需要获取特定网址的内容。这是一个简单而直接的任务,尽管我希望尽可能高效。

WebClient或HttpWebRequest会占用更少的内存吗? 哪个班级能更快地完成同样的任务? 哪个类初始化的时间较短?

1 个答案:

答案 0 :(得分:32)

WebClient只是HttpWebRequest的包装。使用WebClient可能略微(大约几毫秒)比直接使用HttpWebRequest慢。但那种效率低下"具有巨大的好处:它需要更少的代码,更容易使用,并且在使用它时你不太可能犯错误。例如,考虑使用WebClient检索网页文本:

var client = new WebClient();
var text = client.DownloadString("http://example.com/page.html");

HttpWebRequest对比:

string text;
var request = (HttpWebRequest)WebRequest.Create("http://example.com/page.html");
using (var response = request.GetResponse())
{
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        text = reader.ReadToEnd();
    }
}

如果您想下载并保存到文件,事情会变得非常有趣。使用WebClient,只需调用DownloadFile即可。使用HttpWebRequest,您必须创建一个阅读循环等。您可以使用HttpWebRequest犯错误的方式数量确实令人震惊。我知道,因为我已经做了很多。

现在考虑下载两个不同的页面。使用WebClient,您可以写:

var client = new WebClient();
var page1 = client.DownloadString(page1Url);
var page2 = client.DownloadString(page2Url);

完成。使用HttpWebRequest,您必须复制上面的代码,或将该代码包装在方法中。但是,如果您要将其包装在一个方法中,那么为什么不使用已经为您做过的WebClient呢?

当您考虑对快速网站的请求可能需要100到500毫秒的时间,几毫秒' WebClient添加的开销将达到最多总时间的百分比。

WebClient用于简单的事情。如果您需要提供额外的低级控件,请仅使用HttpWebRequest。两者之间的速度考虑是无关紧要的。