Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Webbrowser.Dispose();
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

Webbrowser.Dispose();

beantworten | zitieren | melden

Hallo liebe Community,
ich habe da eine kurze Frage. Hab' auch schon gegooglt, aber irgendwie finde ich nicht s wirkliches auf meien Frage.

Also ich habe eine Anwendung mit einem webbrowser control. Nach einigerzeit frisst das aber schon sehr viel Arbeitsspeicher. Besser gesagt mit jeder aufgerufenen Homepage. Von daher hab ich ein wenig gegooglet und bin auf

webbrowser.dispose();

gestoßen... Nun meine eigentliche Frage. Wie bekomme ich mein webbrowser Control wieder zum laufen, nach dem ich webbrowser.dispose(); gemacht habe?

Ich meine beim Dispose wird es ausgeblendet.
Ich habe es schon mit

Webbrowser webbrowser1 =  new Webbrowser();
probiert, jedoch passiert da oberflächen technisch nichts. Das Element ist immernoch nicht sichtbar.
Falls es euch weiterhilft - ich habe das webbrowser element über den Designer hinzugefügt, also nciht von Hand instanziert...
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von blutiger_anfänger am .
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo blutiger_anfänger,

Controls.Add fehlt

herbivore
private Nachricht | Beiträge des Benutzers
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

beantworten | zitieren | melden

Das haut irgendwie nicht ganz hin...

Also ich probiers nochmal besser zu erklären.
Ich habe eine Forms Anwendung. Dort hab ich über die Toolbox ein WebbrowserControl hinzugefügt. Dieses Webbrowser Control hat den Namen "webbrowser1".

Nun habe ich in den DocumentComplete EventHandler "webbrowser1.dispose();" gesetzt. Mit dem Dispose verschwindet das Element von der Oberfläche meines Forms.

Mit "Controls.Add(webbrowser1);" taucht es jedoch auch nicht mehr auf...
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo blutiger_anfänger,

du hast doch den Code, der ein WebBrowser-Control erzeugt (in xyz.Designer.cs). Den musst du einfach nur nehmen.

Siehe auch Control wird nicht angezeigt

herbivore
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

Hi!

Mit Webbrowser.Dispose zerstörst du deinen Brauser, aber du willst doch weiterbrausen.
Anhand deiner Infos sollte kein Speicher-Leck auftreten. Du machst doch nicht irgendwo ständig Webbrowser ... = new Webbrowser(); ?

Die Speicherverwaltung von .Net wird eh nicht korrekt im Taskmanager wiedergegeben - .Net frißt viel mehr, alses eigentlich braucht, gibts aber bei Anforderung brav wieder zurück (und du guckst den TM, und denkst "Hilfe, mein Memory!").

Und kann auch sein, daß im Webbrowser - Control selbst tatsächlich ein Ressourcen-Leck drinne ist - diesen AxInterop - Komponenten trau ich irgendwie nicht recht.

Wieviel Speicher frisstes denn?
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

beantworten | zitieren | melden

viel zu viel...

dem programm wird eine liste mit domains gegeben, die es aufrufen soll und checken ob sie online sind, und mit einer regurlar expression kurz überprüfen ob ein bestimmter wert vorhanden ist.


für ca. 80 mal webbrowser.navigate, braucht er ob mit oder ohne dispose laut tasmanager knapp 250mb ram... und das kann eigentlich nicht sein...
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

Ah, könnte mir vorstellen, daß du irgendwie Document-Objekte erstellst. Und wenn das auch Com-Objekte sind muß man die speziell disposen - hach habich vergessen.

Aber insgesamt solltest du einfach mal die Klasse System.Net.WebRequest angucken.
Das ist ein managed Objekt, und du kriegst die Ressource direkt in den Speicher, und brauchst sie nicht aus diesem Webbrauser-Monstrum herauszufummeln.

Hier was aus VB übersetztes:

private void DownloadHTTP(string Src, string Dest)
{
	StatusMessage("Begin Download", Tab, Src, " -> ", Path.GetFileName(Dest));
	WebRequest Request = HttpWebRequest.Create(Src);
	using (WebResponse Response = Request.GetResponse()) {
		using (IO.StreamReader Reader = new IO.StreamReader(Response.GetResponseStream(), true)) {
			using (IO.StreamWriter Writer = new IO.StreamWriter(Dest, false, Reader.CurrentEncoding)) {
				//gepufferter Download - es werden maximal je 32767 Zeichen in den Speicher geladen
				char[] Buf = new char[short.MaxValue];
				do {
					int Portion = Reader.Read(Buf, 0, Buf.Length);
					Writer.Write(Buf, 0, Portion);
				}
				while (!(Reader.EndOfStream));
			}
		}
	}
	StatusMessage("Download finished", Tab, Path.GetFileName(Dest));
}
Ist im Nebenthread auszuführen, damit das GUI nicht blockiert
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
Feuerfalke
myCSharp.de - Member

Avatar #avatar-2476.png


Dabei seit:
Beiträge: 130
Herkunft: Nürnberg

beantworten | zitieren | melden

In diesem Fall solltest du vielleicht nicht das Webbrowser-Control nehmen sondern nur die jeweilige Seite alleine, also meinetwegen index.html aufrufen/runterladen und darüber dann auf deinen Wert prüfen. Mit dem Webbrowser-Control hast du sonst einen riesigen Overhead in Form von Bildern usw. Vor Allem wird die Seite ja noch gerendert, was in deinem Fall so wie ich es verstanden habe völlig unnötig ist.

Edit: Zu langsam
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Feuerfalke am .
private Nachricht | Beiträge des Benutzers
blutiger_anfänger
myCSharp.de - Member



Dabei seit:
Beiträge: 293
Herkunft: Meerbusch, NRW

Themenstarter:

beantworten | zitieren | melden

stimmt... am anfang wollt ich ja die seiten auch noch angezeigt bekommen, da hat das webbrowser control sinn gemacht... naja und wenns erstmal steht wieder alles umzumodeln ist dann auch immer so ne sache. Aber ihr habt schon recht.... Werd mich hinsetzen und das ganze mit webrequests lösen...

...und wenn es dann immernoch so viel speicher frisst - fress ich nen besen...
Wenn ich nicht hier bin, findest du mich auf code-bude.net.
private Nachricht | Beiträge des Benutzers