我需要获取特定网址的内容。这是一个简单而直接的任务,尽管我希望尽可能高效。
WebClient或HttpWebRequest会占用更少的内存吗? 哪个班级能更快地完成同样的任务? 哪个类初始化的时间较短?
答案 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
。两者之间的速度考虑是无关紧要的。