Ich habe eine Webseite, die außer einigen Zeichenfolgen nichts enthält. Keine Bilder, keine Hintergrundfarbe oder ähnliches, nur einfacher Text, der nicht wirklich lang ist.
Ich frage mich nur, was ist der beste (damit meine ich den schnellsten und effizientesten) Weg, um die Zeichenfolge in der Webseite zu übergeben, damit ich sie für etwas anderes verwenden kann (z. B. Anzeige in einem Textfeld)? Ich kenne WebClient, aber ich bin mir nicht sicher, ob es das tut, was ich will, und außerdem möchte ich das nicht einmal ausprobieren, selbst wenn es funktioniert hat, weil es beim letzten Mal ungefähr 30 Sekunden gedauert hat eine einfache Bedienung.
Irgendwelche Ideen würden geschätzt.
Die WebClient-Klasse ist hier die natürliche Wahl. Der Webclient sollte keine 30 Sekunden zum Ausführen benötigen (vorausgesetzt, es gibt keine anderen Netzwerkprobleme).
– Jimmy
21. Januar 2011 um 11:32 Uhr
Ihre Auswahl ist auf WebClient oder WebRequest/WebResponse beschränkt (was WebClient unter den Kulissen verwendet, also wählen Sie einfach WebClient). Warum es langsam ist, hat nichts mit der Implementierung des .NET-HTTP-Stacks zu tun. Es könnten Netzwerkprobleme sein, eine schlechte Implementierung der Website, die Sie abrufen möchten, wodurch es langsam ist, eine Antwort zurückzugeben, … Zum Beispiel das Ausführen eines Webclients auf einer korrekt geschriebenen Website wie z google.com Es dauert einige Millisekunden, um die Antwort abzurufen, die weit unter den 30 Sekunden liegt, die Sie bei Ihrer Website beobachten.
– Darin Dimitrow
21. Januar 2011 um 11:34 Uhr
Umgehen Sie Ihre mittlere Analyse? Wenn ja, mit welcher Technologie analysieren Sie es? dh welche Art von Textfeld Win-Formulare, eine andere Website?
– Rauben
21. Januar 2011 um 11:37 Uhr
MrEyes
Die WebClient-Klasse sollte mehr als in der Lage sein, die von Ihnen beschriebene Funktionalität zu verarbeiten, zum Beispiel:
System.Net.WebClient wc = new System.Net.WebClient();
byte[] raw = wc.DownloadData("http://www.yoursite.com/resource/file.htm");
string webData = System.Text.Encoding.UTF8.GetString(raw);
oder (weiter zum Vorschlag von Fredrick in den Kommentaren)
System.Net.WebClient wc = new System.Net.WebClient();
string webData = wc.DownloadString("http://www.yoursite.com/resource/file.htm");
Wenn Sie sagen, dass es 30 Sekunden gedauert hat, können Sie das etwas weiter ausführen? Es gibt viele Gründe, warum das passiert sein könnte. Langsame Server, Internetverbindungen, zwielichtige Implementierung usw.
Sie könnten eine Ebene tiefer gehen und so etwas implementieren:
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com/resource/file.htm");
using (StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream(), Encoding.UTF8))
{
streamWriter.Write(requestData);
}
string responseData = string.Empty;
HttpWebResponse httpResponse = (HttpWebResponse)webRequest.GetResponse();
using (StreamReader responseReader = new StreamReader(httpResponse.GetResponseStream()))
{
responseData = responseReader.ReadToEnd();
}
Am Ende des Tages schließt die WebClient-Klasse diese Funktionalität jedoch für Sie ab. Daher würde ich vorschlagen, dass Sie WebClient verwenden und die Ursachen für die 30-Sekunden-Verzögerung untersuchen.
Alternativ verwenden Sie die DownloadString -Methode und entfernen Sie die Byte-Array-Behandlung: string result = wc.DownloadString(...
– Fredrik Mörk
21. Januar 2011 um 11:40 Uhr
Ich habe mit der WebClient-Klasse eine Schaltfläche codiert, die eine Seite speichert (obwohl eine ziemlich viel Datenverkehr hat) und dann einige Inhalte in einer Datei durch einige der Inhalte der Seite ersetzt. Mit einer Stoppuhr habe ich gemessen, wie lange es dauerte, und es variierte von 10 bis 40 Sekunden. Die Internetverbindung war vielleicht schlecht, aber ich bezweifle, dass das der Hauptgrund war. Leider habe ich den Code für diesen Button nicht mehr, sonst hätte ich ihn gepostet. :\
– Iceyoshi
21. Januar 2011 um 11:41 Uhr
@Fredrik: +1 für den DownloadString-Vorschlag
– MrEyes
21. Januar 2011 um 11:42 Uhr
Übrigens, wird die Seite schneller heruntergeladen, wenn sie für einen Browser angezeigt wird? Ist die Webseite auch sicher – in diesem Fall kann die Validierung von Zertifikaten etwa 40 Sekunden dauern, wenn Ihr Computer das Stammzertifikat nicht kontaktieren kann. Meiner Erfahrung nach kann eine DNS-Fehlkonfiguration oft zu einer langsamen Netzwerkantwort führen.
– Jimmy
21. Januar 2011 um 11:44 Uhr
@Iceyoshi: Wie viele Daten hast du heruntergeladen? Ein paar KB oder ein paar MB? Sind Sie auch sicher, dass die Verzögerung beim WebClient-Aufruf und nicht beim anschließenden Parsen/Ersetzen aufgetreten ist?
– MrEyes
21. Januar 2011 um 11:46 Uhr
Wenn Sie Text herunterladen, würde ich empfehlen, den WebClient zu verwenden und einen Streamreader für den Text zu erhalten:
WebClient web = new WebClient();
System.IO.Stream stream = web.OpenRead("http://www.yoursite.com/resource.txt");
using (System.IO.StreamReader reader = new System.IO.StreamReader(stream))
{
String text = reader.ReadToEnd();
}
Wenn dies lange dauert, liegt wahrscheinlich ein Netzwerkproblem oder ein Problem auf dem Webserver vor. Versuchen Sie, die Ressource in einem Browser zu öffnen, und sehen Sie, wie lange das dauert. Wenn die Webseite sehr groß ist, möchten Sie sie vielleicht in Teilen streamen, anstatt wie in diesem Beispiel ganz bis zum Ende zu lesen. Ansehen http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx um zu sehen, wie man aus einem Stream liest.
Tester
In Bezug auf den Vorschlag würde ich vorschlagen, dass Sie WebClient verwenden und die Ursachen für die 30-Sekunden-Verzögerung untersuchen.
Aus den Antworten auf die Frage System.Net.WebClient unangemessen langsam
Die WebClient-Klasse ist hier die natürliche Wahl. Der Webclient sollte keine 30 Sekunden zum Ausführen benötigen (vorausgesetzt, es gibt keine anderen Netzwerkprobleme).
– Jimmy
21. Januar 2011 um 11:32 Uhr
Ihre Auswahl ist auf WebClient oder WebRequest/WebResponse beschränkt (was WebClient unter den Kulissen verwendet, also wählen Sie einfach WebClient). Warum es langsam ist, hat nichts mit der Implementierung des .NET-HTTP-Stacks zu tun. Es könnten Netzwerkprobleme sein, eine schlechte Implementierung der Website, die Sie abrufen möchten, wodurch es langsam ist, eine Antwort zurückzugeben, … Zum Beispiel das Ausführen eines Webclients auf einer korrekt geschriebenen Website wie z google.com Es dauert einige Millisekunden, um die Antwort abzurufen, die weit unter den 30 Sekunden liegt, die Sie bei Ihrer Website beobachten.
– Darin Dimitrow
21. Januar 2011 um 11:34 Uhr
Umgehen Sie Ihre mittlere Analyse? Wenn ja, mit welcher Technologie analysieren Sie es? dh welche Art von Textfeld Win-Formulare, eine andere Website?
– Rauben
21. Januar 2011 um 11:37 Uhr