2010-06-27 4 views
5

Questo accade solo su una delle mie macchine. Penso che sia un problema di configurazione dell'ambiente. Tutte le macchine eseguono il firewall del software ESET Smart Security. Qualche idea?DownloadStringAsync blocca il thread per 14 secondi in prima chiamata

using System; 
using System.Net; 
using System.Diagnostics; 
using System.Threading; 

namespace Test 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      bool exit = false; 
      WebClient wc = new WebClient(); 
      DateTime before = DateTime.Now; 
      wc.DownloadStringAsync(new Uri("http://74.125.95.147"), "First"); // IP Address of google, so DNS requests don't add to time. 
      wc.DownloadStringCompleted += delegate(object sender, DownloadStringCompletedEventArgs e) 
      { 
       Debug.WriteLine(e.UserState + " Call: " + (DateTime.Now - before)); 

       if ((string)e.UserState == "First") 
       { 
        before = DateTime.Now; 
        wc.DownloadStringAsync(new Uri("http://74.125.95.147"), "Second"); 
       } 
       else 
        exit = true; 
      }; 

      /* 
      * 
      * Output: 
      * 
      * First Call: 00:00:13.7647873 
      * Second Call: 00:00:00.0740042 
      * 
      */ 

      while (!exit) 
       Thread.Sleep(1000); 
     } 
    } 
} 
+2

Ciò potrebbe essere dovuto al rilevamento proxy automatico. Qualsiasi modifica se si imposta WebClient.Proxy su GlobalProxySelection.GetEmptyWebProxy? http://msdn.microsoft.com/en-us/library/system.net.webclient.proxy.aspx http://msdn.microsoft.com/en-us/library/system.net.globalproxyselection.getemptywebproxy.aspx – dtb

+0

Sì, è stato risolto. Grazie! Prima chiamata: 00: 00: 00.1680096 Seconda chiamata: 00: 00: 00.0400023 – Mango

+2

@dtb, aggiungere che come risposta. Merita un voto in rialzo o due. –

risposta

12

La macchina è configurata per eseguire il rilevamento automatico proxy .

È possibile disattivare qui:

Screenshot

In alternativa, è possibile escludere manualmente il proxy utilizzato dal WebClient. Impostare WebClient.Proxy Property su null per specificare che non deve essere utilizzato alcun proxy. Qualsiasi impostazione proxy esplicito disabilita il rilevamento proxy automatico.

client.Proxy = null; 

Tuttavia, si dovrebbe offrire all'utente la possibilità di configurare un proxy nell'applicazione in questo caso, perché alcuni utenti sono tenuti ad utilizzare un proxy quando si accede al Web.

+7

Poiché GlobalProxySelection è deprecato, impostare Proxy su null Inoltre, per eseguire questa operazione a livello globale, WebRequest.DefaultWebProxy = null; – Mango

+4

C'è un lato negativo a fare questo? Se questo è nel software client e il client sta usando un proxy, la richiesta fallirà? – NickAldwin