2011-02-08 15 views
11

estoy usando un cliente Web para descargar una cadena de una página web (que solo contiene texto plano, nada más), por lo que utilizar el método DownloadString:C# WebClient de acción lenta primera vez

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

Funciona bien , pero el problema es que la primera vez que descarga la cadena tarda mucho tiempo, como 5 segundos. Después de eso, funciona rápido. ¿Por qué sucede esto y cómo puede superar este problema?

+0

¿Es esta su servicio web o alguien que vigilara? y sucede esto cada vez que comienzas a tu cliente? (incluso si se reinicia directamente cuando se descarga la cadena?) – Peter

+0

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

+0

También tenga en cuenta que esto hace que la aplicación se congele, incluso cuando se utiliza la versión 'async' del método. ¿Cómo es que mierda como esta se libera? –

Respuesta

21

Establecer la propiedad Proxy de su objeto WebClient nulo debe eliminar las demoras que está viendo. Alternativamente, si ha configurado su sistema para usar un proxy, puede recuperarlo con WebRequest.GetSystemWebProxy. El segundo método debería eliminar la demora en cualquier caso.

+0

¡Gran respuesta! Muchas gracias. –

+0

Respuesta perfecta. Gracias. – Kloar

+0

Excelente respuesta. ¡Gracias! –

3

Bueno, la primera vez que necesita hacer una búsqueda de DNS y conectarse al host - después de eso, dentro del mismo proceso, puede estar reutilizando la misma conexión. Por primera solicitud a cualquier lugar, bien puede también estar tratando de detectar la configuración de proxy etc.

Si quieres ver lo que realmente está sucediendo a nivel de red para que sea lenta, sugiero que agarrar Wireshark y monitorea el tráfico con eso.

6

Noté lo mismo. DotTrace muestra se trata de pasar la mayor parte de su tiempo enumerando las opciones de proxy:

Cuestiones relacionadas