webclient.DownloadString & Ramspeicher

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Jens Herwig.

    webclient.DownloadString & Ramspeicher

    Guten Tag zusammen...

    Bei Problemen mit der Programmierung reicht es ja eigentlich sonst immer Google um Rat zu fragen, aber heute stehe ich mal wieder vor einem Problem wo selbst DIE mir auch nicht wirklich weiter helfen können...

    Ich habe mit mit Visual Basic 2015 (Programmiersprache VB) ein Programm gebaut welches HTML-Quellcode herunter lädt und analysiert. Zum herunterladen des Quellcode benutze ich den Webclient.

    Folgender Aufbau:

    Das Programm lädt zunächst via Webclient (wc.DownloadStrind(URI1, Richtextbox1.text)) den HTML-Quellcode einer Webseite.
    Danach wird nach Verlinkungen in diesem Quelltext gesucht und diese URL's in eine Listbox geschrieben.
    Nun wird jede URL in der Listbox mit dem Webclient aufgerufen und wieder der Quelltext in die Richtextbox geladen und danach auf mehrere Vorkommnisse geprüft. Sollte ein oder mehrere Vorkommnisse enthalten sein wird die URL sowie das Vorkommnis gesondert dokumentiert.

    Soweit sogut, Funktioniert auch.
    Aber wenn mir nun eine Webseite zu viele Verlinkungen liefert, also mein Webclient zu oft die Richtextbox mit dem DownloadString überschreibt, hat der Spaß nach ein paar Minuten ein ende weil dem Computer, welcher das Programm ausführt der Arbeitsspeicher zuneige geht... Im Diagnosefeld in Visual Basic 20015 ist ein deutlicher und permanenter Anstieg des Prozessspeichers zu erkennen...

    Hat irgendjemand eine Ahnung warum das so ist oder besser noch wie ich das Problem in den Griff bekommen kann ?
    (Ich möchte ungern ein Programm wessen Mindestvoraussetzungen 10 GB Arbeitsspeicher sind!, 4 GB sollten da ausreichen!)
    (HTTPclient macht im übrigen genau das gleiche!)

    Ich habe so das Gefühl, das die vom Webclient herunter geladenen Daten temporär gespeichert bleiben und so das Programm zum Platzen bringt...


    Schon mal Vielen Dank für eure Antworten

    MfG

    Jens Herwig
    Um mögliche Speicherlecks zu finden wäre es schon recht hilfreich, wenn du relevante Codestellen posten könntest. Sowas aus der Luft heraus zu schätzen ist schon schwer, da fällt mir nur ein: WebClient ist IDisposable. Wirfst du den vernünftig weg?

    VB.NET-Quellcode

    1. Dim wc As WebClient = New WebClient(), URI1 As Uri
    2. Private Sub Quellcode_Download()
    3. For i As Integer = 0 To ListBox1.Items.Count - 1
    4. URI1 = New Uri(ListBox1.Items.Item(i).ToString)
    5. RichTextBox1.Text = wc.DownloadString(URI1)
    6. Quellcode_Analyse()
    7. Next
    8. End Sub


    den gesammten code würde keiner freiwillig bis zum Schluss studieren!

    Code-Tag eingefügt. Nächstes Mal bitte daran denken! ~Thunderbolt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    ...es sind doch alle Informationen da... ?

    aber ich wiederhole mich noch mal gern...

    die For-Next Schleife wird je nach dem wie viele URL's in der Listbox sind entsprechend für jede URL einmal ausgeführt und bewirkt, das der Webclient den Quelltest der jeweiligen URL an die Richtextbox übergibt. Die Sub-Routine, welche ich nicht mitgepostet habe wird diesen Quelltext auf einige Vorkommnisse prüfen (If Richtextbox1.text.contains("blablabla") then :else If ... else If ... else If ... else If ... else If ... ) und sollte mit dem Fehler am geringsten was zu tun haben. Ich kann Diese auch auskommentieren sodass sie nicht mit ausgeführt wird und der Fehler bleibt der selbe.

    Der eigentliche Aufruf des Webclienten siehe oben!

    Das Programm besteht aus nichts weiterem als aus dem Aufruf des Webclienten und aus einer Quelltextanalyse.
    Also welche Info's fehlen noch?

    Jens Herwig schrieb:

    und sollte mit dem Fehler am geringsten was zu tun haben
    Wenn Du Dich so gut auskennst, bräuchtest Du unsere Hilfe nicht.
    Also:
    Wir würden gern Deinen Effekt reproduzieren, dazu benötigen wir Deinen Code, keine verbale Beschreibung.
    Wenn Du nicht bereit bist, Deinen Code zu posten, kann dieser Thread geschlosen werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es ist mir schon klar, dass es die Sache durch reproduzieren wesentlich vereinfachen würde sofern der gesamte Code vorliegt.
    Doch solltet ihr hier mal bedenken, das es nicht nur Hobbyprogrammierer auf der Welt gibt welche kein großes Interesse am Datenschutz haben. Somit kann bez. darf ich den Exakten Code nicht veröffentlichen, da wie schon erwähnt der abgefragte HTML-Code zum Teil auch auf sensible Daten geprüft werden soll und diese nun mal auch irgendwie zuvor in den Programmcode kommen müssen. Ohne diesen sensiblen Teil bleibt vom Code nicht viel mehr übrig als den oben genannten Code. Und genau der Code bez. der Webclient an sich selbst verursachte das Problem mit jedem Aufruf, egal ob mit den empfangenen Daten etwas angestellt wurde oder nicht. Daher erhoffte ich mir Hilfe bezüglich der Verwendung des Webclients, wenn dieser in Dauerbetrieb geht.

    Um nun zum Abschluss zu kommen:
    Der Fehler lag nicht am Code!
    Vielmehr schein es an der zu vorigen Programmierumgebung zu liegen. Das Projekt wurde auf einen anderen Arbeitsplatz verschoben und ohne weitere Änderungen am Code funktioniert nun alles reibungslos!

    An dieser Stelle möchte ich mich dennoch nochmals für die Hilfestellung bedanken, auch wenn ich mir zuvor mehr erhofft hatte...

    Jens Herwig schrieb:

    Das Projekt wurde auf einen anderen Arbeitsplatz verschoben und ohne weitere Änderungen am Code funktioniert nun alles reibungslos!


    das klingt ja abenteuerlich (wirklich, nicht falsch verstehen).
    was kann hierfür verantwortlich sein?
    andere vs version?
    Gruß Hannes