2010-06-27 5 views
5

Dies geschieht nur auf einer meiner Maschinen. Ich denke, es ist ein Umgebungsprojektionsproblem. Auf allen Computern wird die Firewall der ESET Smart Security-Software ausgeführt. Irgendwelche Ideen?DownloadStringAsync blockiert Thread für 14 Sekunden beim ersten Aufruf

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

Dies kann auf automatische Proxy-Erkennung zurückzuführen sein. Jede Änderung, wenn Sie WebClient.Proxy auf GlobalProxySelection.GetEmptyWebProxy festlegen? 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

Ja, das hat es behoben. Vielen Dank! Erster Anruf: 00: 00: 00.1680096 Zweiter Anruf: 00: 00: 00.0400023 – Mango

+2

@ dtb, fügen Sie das als Antwort hinzu. Es verdient eine oder zwei Stimmen. –

Antwort

12

Ihr Gerät ist so konfiguriert, Automatische Proxy-Erkennung auszuführen.

Sie können es hier deaktivieren:

Screenshot

Alternativ können Sie manuell den Proxy durch den WebClient verwendet außer Kraft setzen. Setzen Sie WebClient.Proxy Property auf null, um anzugeben, dass kein Proxy verwendet werden soll. Jede explizite Proxy-Einstellung deaktiviert die automatische Proxy-Erkennung.

client.Proxy = null; 

Allerdings sollten Sie den Benutzer die Möglichkeit bieten einen Proxy in Ihrer Anwendung in diesem Fall zu konfigurieren, da einige Benutzer erforderlich sind, einen Proxy zu verwenden, wenn das Web zugreifen.

+7

Da GlobalProxySelection veraltet ist, setzen Sie Proxy auf Null. Um dies global durchzuführen, muss WebRequest.DefaultWebProxy = null; – Mango

+4

Gibt es einen Nachteil, dies zu tun? Wenn dies in der Client-Software geschieht und der Client einen Proxy verwendet, schlägt die Anfrage fehl? – NickAldwin

Verwandte Themen