Guten Morgen.
Ich arbeite mit der Komponenten WebBrowser (hauptsächlich mit "NAVIGATE").
In meinen CODE rufe ich ca. 100x diese Funktion (in eine Schleife). Leider ist die CPU Auslastung sehr hoch liegt bei ca. 30%.
Wie kann ich mit WebBrowser arbeiten und die CPU auslastung verringern?
Hi HL2002,
du könntest den Profiler verwenden, und schauen, wo es klemmt. Dann kannst du diese Stelle evtl. optimieren. Zuerst einmal solltest du herausbekommen, ob es an C# liegt oder am Browser (z.B. Javascript).
Christian
Weeks of programming can save you hours of planning
Welche IE Version benutzt Du? (Request.Browser.Version.ToString()).
Vielleicht kannst Du auf eine neue IE Version aktualisieren oder einen anderen Browser nehmen? Kannst Du die Web-Seiten, die dahinter stehen, optimieren oder ist das für Dich eine Black Box?
Naja, 100 mal nen Webbrowser auf eine Seite aufrufen und sich wundern das dann der Prozessor Arbeiten muss....
Frage ist was ist daran falsch wenn ich eine Komponente 100 mal benutze?
Wie kann ich einen Profiler auf einen Browser anwenden 😦 Ich hatte früher einen Profiler auf SQL angewendet 😃
Was er meint, dass man sich eben nicht wundern muss, dass die Last der CPU hoch geht, wenn man 100 mal in wenigen Sekunden eine Webseite anfragt; und da hat er recht.
Wie man den Profiler in VS verwendet: dazu findest Du mit Sicherheit hunderte ausführliche Tutorials per Google.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich rufe aber nicht 100x diese Methode paralel auf, sondern eben nach einander.
Ich mache mich schlau bezüglich Profiler.
Vielleicht zeigst du uns einfach mal besagte Schleife damit wir uns besser ein Bild machen können wie die Problemstelle aussieht.
Grundsätzlich stimme ich meinen Vorredner aber zu, bis jetzt bin ich auch nicht sonderlich überrascht über die CPU Auslastung.
Wenn die Schleife den UI-Thread blockiert, dann ist diese Auslastung auch eher zu erwarten.
foreach (DataGridViewRow rw in dataGridView.Rows)
{
string prepare_url = @"http://www.ebay____****/" + rw.Cells["Artikelnummer"].Value.ToString();
webBrowser1.Navigate(prepare_url);
Wait("");//Warte bis in WebBrowser ein HTMLCODE gelistet wurde....
}
Wait...(Beispiel).
while (string.IsNullOrEmpty(html) || html.ToLower().IndexOf(Suchwert1.ToLower()) == -1 || html.ToLower().IndexOf(Suchwert2.ToLower()) == -1)
{
if (webBrowser1.Document != null && webBrowser1.Document.Body != null && webBrowser1.Document.Body.OuterHtml != null)
{
html = webBrowser1.DocumentText;
}
Application.DoEvents();
}
Wenn du dir die Doku anschaust, dann solltest du dir den Event DocumentCompleted einmal genauer anschauen.
Dir ist schon bewusst, dass eBay ne WebAPI bietet und jedenfalls der Interagieren von Anwendungen über die reguläre Webseite (sofern sie es jedenfalls können) untersagt? 😉
Und wer DoEvents verwendet; der hat definitiv irgendein Murks im Code.
Warum DoEvents Mist ist!
Eigentlich kann man das erwarten, wenn derjenige schon ein paar Jahre C# kennt (genauso wie die richtigen Forentags zu verwenden, was ich mal korrigiert hab) 😉
Ansonsten ist Sir Rufo nichts hinzuzufügen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
EbaY war nur ein Beispiel, weil ich den genanuen Projekt nicht nehnen möchte.
In diesen Projekt wird änlich wie bei Ebay mit Artikelnummern gearbeitet (wie beim jeden Online Shop).
Shaue ich mir an....
https://msdn.microsoft.com/de-de/library/system.windows.forms.webbrowser.documentcompleted%28v=vs.110%29.aspx