2011-02-08 22 views
11

Sto usando un WebClient per scaricare una stringa da un sito web (che contiene solo testo normale, niente altro), per cui uso il metodo DownloadString:C# WebClient azione lenta la prima volta

WebClient wc = new WebClient(); 
string str = wc.DownloadString("http://blah"); 

Funziona bene , ma il problema è che la prima volta che scarica la stringa ci vuole molto tempo, come 5 secondi. Dopo ciò funziona velocemente. Perché questo accade e come superare questo problema?

+0

È questo il tuo servizio web o qualcuno elses? e succede ogni volta che avvii il tuo cliente? (anche se si riavvia direttamente quando viene scaricata la stringa?) – Peter

+0

Correlati: http://stackoverflow.com/questions/4415443 –

+0

Si noti inoltre che ciò causa il blocco dell'applicazione anche quando si utilizza la versione 'async' del metodo. Come viene rilasciata una merda come questa !? –

risposta

21

L'impostazione della proprietà del proprio oggetto WebClient su null dovrebbe eliminare i ritardi che si stanno verificando. In alternativa, se hai configurato il tuo sistema per utilizzare un proxy, puoi recuperarlo con WebRequest.GetSystemWebProxy. Il secondo metodo dovrebbe eliminare il ritardo in entrambi i casi.

+0

Ottima risposta! Grazie mille. –

+0

Risposta perfetta. Grazie. – Kloar

+0

Risposta superba. Grazie! –

3

Bene, la prima volta che deve eseguire una ricerca DNS e connettersi all'host, dopo di che, all'interno dello stesso processo, potrebbe essere riutilizzato la stessa connessione. Per la prima richiesta di ovunque, si può ben anche tentare di rilevare le impostazioni proxy, ecc

Se volete vedere che cosa sta realmente accadendo a livello di rete per rendere più lento, vi consiglio di afferrare Wireshark e monitorare il traffico con quello.

6

Ho notato la stessa cosa. DotTrace mostra è trascorso la maggior parte del suo tempo enumerare opzioni proxy:

Problemi correlati