2014-04-01 37 views
13

我需要获取特定URL的内容。这是一个简单而直接的任务,尽管我想尽可能高效。HttpWebRequest或Webclient更快

WebClient或HttpWebRequest会占用较少的内存吗? 哪个班会更快地完成相同的任务? 哪个类需要较少的时间来初始化?

+1

“这取决于”。为什么不尝试并找出答案?在易用性和功能方面也有差异。 –

+0

@JohnSaunders它只是一个更快的问题。老实说,我不知道如何衡量我在问题中提到的内容。 – niklon

+3

如果你不能测量它,那么你不需要知道它。没有简单的“更快”的概念。充其量,“特殊情况下更快”。基本上,不要过早地优化。 –

回答

30

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,它已经为你做了呢?

当你考虑到快速的Web站点的请求可能会花费100到500毫秒的量级,在几毫秒开销WebClient增加将在总时间最个位数百分比达

使用WebClient为简单的事情。如果您需要其提供的附加底层控制,请仅使用HttpWebRequest。两者之间的速度考虑是无关紧要的。

+0

我会说性能的差异是在几微秒的数量级,而不是毫秒...好的答案! – Loudenvier

相关问题