Frage

Ich mache ein Programm, das von ihm auf eine Website und Downloads XML verbindet. Es zeigt dann die Informationen an den Benutzer.

Das Problem, das ich habe, ist, wenn ich zum ersten Mal das Programm öffnen und starten Sie die XML-Informationen herunterzuladen es eine wirklich lange Zeit in Anspruch nimmt. Wenn ich eine andere Seite von der Website mit dem Programm noch offen zu laden, dauert es etwa ein zweite Hälfte zum Download bereit. Ich frage mich, ob es eine Möglichkeit, dies zu vermeiden war.

Ich verwende derzeit eine HttpWebRequest den Strom und ein Stream zum Download, es zu lesen. Dann gehe ich durch und analysiert die XML XLinq verwendet wird.

War es hilfreich?

Lösung

Versuchen Sie explizit die Proxy-Einstellung. Wenn Sie nicht über einen Proxy definiert haben, wird die HttpRequest Klasse Zeit mit der Suche nach einem verbringen. Sobald es hat (oder nicht) eine gefunden wird, wird sie diese Informationen für die Lebensdauer der Anwendung verwenden, nachfolgende Anforderungen zu beschleunigen.

//internally sets "ProxySet" to true, so won't search for a proxy
request.Proxy = null;

Sie können dies auch in der .config definieren:

<system.net>
  <defaultProxy
    enabled="false"
    useDefaultCredentials="false" >
    <proxy/>
    <bypasslist/>
    <module/>
  </defaultProxy>
</system.net>

Andere Tipps

Die erste Zeitverzögerung kann auf eine Kombination der folgenden Ursachen zurückzuführen sein:

  1. Zeit den Server DNS-Eintrag
  2. zu lösen
  3. Zeit des Proxy zum Download autoconfig Skript, kompilieren und führen Sie es aus, um zu bestimmen das effektive Proxy
  4. Netzwerk-Latenz von Ihrer App an den Proxy-Server (wenn es ein Proxy-Server in Ihrer Umgebung)
  5. Netzwerk-Latenz von der Proxy-Server auf den tatsächlichen Zielserver.
  6. Die Latenz auf der Server die XML dienen dokumentieren. Wenn es hat eine zu durchqueren In-Memory-Objektdarstellung und erzeugen das XML-Dokument, das könnte einige Zeit dauern. Auch wenn es sich um unter Verwendung von Techniken wie XML-Serialisierung zu erzeugen, die Dokument, dann je nachdem, wie die Serializer konfiguriert ist, die erste rufen serialisiert / deserialisiert immer dauert eine lange Zeit, aufgrund der Tatsache, daß eine Zwischenbaugruppe Bedürfnisse erzeugt und kompiliert werden.
  7. Parsen der XML auf der Client-Seite vielleicht Zeit in Anspruch nehmen, besonders wenn die XML Dokumentstruktur ist sehr komplex.
  8. Wenn XLinq (wie der XMLSerializer) erzeugt Temperaturbaugruppe für das XML Parsen & abfragt, dann ist die erste Anfrage wird mehr Zeit in Anspruch als das nehmen nachfolgend.

, um herauszufinden, welche Teilzeit nimmt, legen Sie einige Zeit in Ihre Code Anmeldung System.Diagnostics.Stopwatch mit ():

// this is the time to get the XML doc from the server, including the time to resolve DNS, get proxy etc.
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
timer.Stop();
Console.WriteLine("XML download took: " + timer.ElapsedMilliseconds);

timer.Start();
// now, do your XLinq stuff here...
timer.Stop();
Console.WriteLine("XLinq took: " + timer.ElapsedMilliseconds);

Sie können rund um dieses eine Schleife einfügen, und sehen, was der Unterschied für die verschiedenen Komponenten zwischen der ersten Anforderung und nachfolgenden Anforderungen ist.

Wenn Sie feststellen, dass der Unterschied in der das Herunterladen ist, und nicht die Abfrage, dann kann man untersuchen, indem ein Netzwerk sniff immer mit

Sie würden wahrscheinlich etwas mehr Forschung zu tun haben, einen Teil des Antrags, um herauszufinden, was auf dem ersten Durchgang mehr stattfindet. Mein erster Instinkt sagt, dass die DNS-Anfrage die IP-Adresse für den Domain-Namen erhalten Sie mehr angeben nehmen, weil es das erste Mal nicht zwischengespeichert wird es läuft. Es könnte auch der Web-Server am anderen Ende sein, dass einige Start-up-Skripte Sie zum ersten Mal ihm Abfrage auszuführen hat. Sie haben erwähnt, dass die erste Anforderung eine lange Zeit in Anspruch nimmt, aber Sie sagen nicht, wie lange. Ist dies verursacht ein großes Problem, dass es so lange dauert die erste Anforderung zu tun, oder ist es nur ein Ärgernis?

scroll top