2014-04-01 13 views
13

Tôi cần GET nội dung của một URL cụ thể. Đó là một nhiệm vụ đơn giản và dễ hiểu, mặc dù tôi muốn càng hiệu quả càng tốt.Là HttpWebRequest hoặc Webclient nhanh hơn

WebClient hoặc HttpWebRequest có mất ít bộ nhớ hơn không? Lớp học nào sẽ hoàn thành nhiệm vụ tương tự nhanh hơn? Lớp nào mất ít thời gian hơn để khởi tạo?

+1

"Nó phụ thuộc". Tại sao không thử nó và tìm hiểu? Ngoài ra còn có sự khác biệt về tính dễ sử dụng và khả năng. –

+0

@JohnSaunders nó chỉ là vấn đề trong đó một là nhanh hơn. Thành thật mà nói tôi không biết làm thế nào để đo chính xác những gì tôi đã đề cập trong câu hỏi của tôi. – niklon

+3

Nếu bạn không thể đo được, thì bạn không cần phải biết điều đó. Không có khái niệm đơn giản về "nhanh hơn". Tốt nhất, có "trường hợp cụ thể nhanh hơn". Về cơ bản, không tối ưu hóa sớm. –

Trả lời

30

WebClient chỉ là một trình bao bọc xung quanh HttpWebRequest. Sử dụng WebClient có khả năng là hơi (với thứ tự vài phần nghìn giây) chậm hơn sử dụng trực tiếp HttpWebRequest. Nhưng điều đó "không hiệu quả" đi kèm với những lợi ích to lớn: nó đòi hỏi ít mã hơn, dễ sử dụng hơn và bạn ít có khả năng mắc lỗi khi sử dụng nó. Xem xét, ví dụ, lấy nội dung của một trang Web sử dụng WebClient:

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

Contrast đó để 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(); 
    } 
} 

Mọi thứ trở nên thật thú vị nếu bạn muốn tải về và lưu vào tập tin. Với WebClient, đó là một vấn đề đơn giản khi gọi số DownloadFile. Với HttpWebRequest, bạn phải tạo vòng lặp đọc, v.v. Số cách bạn có thể phạm sai lầm với HttpWebRequest thực sự đáng kinh ngạc. Tôi biết vì tôi đã làm được rất nhiều.

Bây giờ, hãy xem xét tải xuống hai trang khác nhau. Với WebClient bạn có thể viết:

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

Xong. Với HttpWebRequest, bạn phải sao chép mã ở trên hoặc bọc mã đó trong một phương thức. Nhưng nếu bạn sẽ quấn nó trong một phương pháp, thì tại sao không chỉ sử dụng WebClient, mà đã làm nó cho bạn?

Khi bạn xem xét rằng một yêu cầu tới một trang Web nhanh có thể sẽ mất về trình tự từ 100 đến 500 mili giây, overhead vài mili giây rằng WebClient thêm sẽ lên tới tại hầu hết các phần trăm đơn lẻ chữ số của tổng thời gian .

Sử dụng WebClient cho những thứ đơn giản. Chỉ sử dụng HttpWebRequest nếu bạn yêu cầu điều khiển cấp thấp bổ sung mà nó cung cấp. Tốc độ cân nhắc giữa hai yếu tố này là không liên quan.

+0

Tôi sẽ nói sự khác biệt về hiệu suất là theo thứ tự của micro giây, không phải là mili giây ... Câu trả lời hay! – Loudenvier

Các vấn đề liên quan