我需要获取特定URL的内容。这是一个简单明了的任务,但我希望它尽可能高效。
WebClient还是HttpWebRequest占用的内存更少? 哪个类完成相同的任务更快? 哪个类初始化时间更短?
我需要获取特定URL的内容。这是一个简单明了的任务,但我希望它尽可能高效。
WebClient还是HttpWebRequest占用的内存更少? 哪个类完成相同的任务更快? 哪个类初始化时间更短?
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
。两者之间的速度考虑是无关紧要的。