Memory Leak durch Threads?

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Memory Leak durch Threads?

    Hallo,

    ich habe ein Programm, das bei Klick auf einen Artikel über den dazugehörigen EAN eine Website öffnet und dort den Inhalt mit dem Suchergebnis darstellt. Da zum Artikel zusätzlich viele weitere Informationen geladen werden wie z.B. Verkaufshistory etc, habe ich manche dieser Ladevorgänge in Threads ausgelagert. Ich kann nun ca. 20-30 Artikel aufrufen, habe dann aber bei der compilierten Exe das Problem, dass dann das Programm irgendwann ohne irgend welche Fehler anzuzeigen, aussteigt. Im Debuger zeigt er mir zumind. was mit "Out of Memory" an.
    Ich habe nun die Vermutung, dass das durch die Threads erzeugt wird, da diese zwar gestartet werden, dann aber nicht wieder entladen werden?

    Ich rufe das z.B. wie folgt auf:

    VB.NET-Quellcode

    1. Dim thread10 As New Threading.Thread(Sub() Me.WebBrowser1.Navigate("about:blank"))
    2. thread10.Start()



    oder

    VB.NET-Quellcode

    1. Dim thread1 As New Threading.Thread(Sub() Me.OffeneBestellungen(Me.txtArtNum.Text))
    2. thread1.Start()


    Die Funktionen ansich sind ja eigentlich in sich abgeschlossen. Das Sub gibt am Ende auch seine verwendeten Datenverbindungen frei mit
    dr.Close()
    cn.Close()
    cn.Dispose()
    cmd.Dispose()

    Wie kann ich solche Memory-Leaks am besten aufspüren. Muß so ein Treat auch irgendwie noch entladen werden?

    Superuse schrieb:

    Muß so ein Treat auch irgendwie noch entladen werden?
    Nein.
    Ein Thread ist beendet, wenn die Thread-Prozedur verlassen wird.
    Poste mal einen in sich geschlossenen Code.
    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!
    Mir sieht das sehr nach unzulässigen Zugriffen auf den Gui-Thread aus.
    Normalerweise wird sowas mit einer Fehlermeldung quittiert.
    Die Fehlermeldung kann man deaktivieren - dann ist das Programm aber in einem unkalkulierbaren Zustand, und es mag alles mögliche passieren - vielleicht hat das ja was mit dem Problem zu tun.