2014-04-01 19 views
13

Ho bisogno di ottenere il contenuto di un URL specifico. È un compito semplice e diretto, anche se voglio è il più efficiente possibile.È HttpWebRequest o Webclient più veloce

WebClient o HttpWebRequest richiedono meno memoria? Quale classe completerà la stessa attività più velocemente? Quale classe impiega meno tempo per l'inizializzazione?

+1

"Dipende". Perché non provarlo e scoprirlo? Ci sono anche differenze nella facilità d'uso e di capacità. –

+0

@JohnSaunders è solo la questione di quale è più veloce. Onestamente non so come misurare esattamente ciò che ho menzionato nelle mie domande. – niklon

+3

Se non riesci a misurarlo, non devi saperlo. Non esiste un semplice concetto di "più veloce". Nella migliore delle ipotesi, c'è "più veloce in circostanze particolari". Fondamentalmente, non ottimizzarlo prematuramente. –

risposta

30

WebClient è solo un involucro intorno a HttpWebRequest. L'utilizzo di WebClient è potenzialmente leggermente (dell'ordine di alcuni millisecondi) più lento rispetto all'utilizzo di HttpWebRequest direttamente. Ma questa "inefficienza" comporta enormi vantaggi: richiede meno codice, è più facile da usare e meno probabilità di commettere errori durante l'utilizzo. Si consideri, ad esempio, recuperare il testo di una pagina Web utilizzando WebClient:

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

Contrasto che a 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(); 
    } 
} 

Le cose si fanno davvero interessanti se si desidera scaricare e salvare su file. Con WebClient, è semplice chiamare DownloadFile. Con HttpWebRequest, è necessario creare un ciclo di lettura, ecc. Il numero di modi in cui è possibile commettere un errore con HttpWebRequest è davvero sbalorditivo. Lo so perché ne ho fatti molti.

Considerare ora il download di due pagine diverse. Con WebClient è possibile scrivere:

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

Fatto. Con HttpWebRequest, dovresti duplicare il codice sopra o avvolgere quel codice in un metodo. Ma se hai intenzione di avvolgerlo in un metodo, allora perché non usare solo lo WebClient, che lo fa già per te?

Se si considera che la richiesta di un sito Web veloce vorranno probabilmente dell'ordine di 100 a 500 millisecondi, in testa i pochi millisecondi che WebClient aggiunge ammonterà a al massimo una cifra percentuale del tempo totale .

Utilizzare WebClient per le cose semplici. Utilizzare solo HttpWebRequest se si richiede il controllo di livello inferiore aggiuntivo che offre. Le considerazioni sulla velocità tra i due sono irrilevanti.

+0

Direi che la differenza di prestazioni è dell'ordine di microsecondi, non di millisecondi ... Bella risposta! – Loudenvier

Problemi correlati