vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Programm müllt den Speicher voll aber warum? 
Autor: nero-15
Datum: 16.02.08 22:48

Hi,
ich habe ein Programm geschrieben, das Homepages von nem serber laden soll. Das funktioniert soweit auch ganz gut. Leider müllt sich das Programm den Speicher bzw Auslagerungsdatei dicht, bis es ne Exception wegen illegalem Speicherzugriff wirft.
Der Code lautet wie foglt:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button2.Click
        'Wurzelverzeichnis ersetllen
        Dim rootPath As String = TextBox3.Text
        createDirectory(rootPath)
 
        ' Variablendeklaration für die For Schleife
        Dim seite As String
        Dim seitenStream As Stream
        Dim sr As StreamReader
        Dim site As String
        Dim artikel As String
        Dim titel As String
        Dim rawDate As String
        Dim datumArray() As String
        Dim year As String = ""
        Dim datum As String
        Dim text As String
        Dim nummer As String
        Dim teil As String
        Dim dateiname As String
        Dim sw As StreamWriter
        Dim errorWriter As StreamWriter
        Dim i As Integer
 
        ' bekommt den Startwert aus einer Textbox und rattert dann los
        For i = TextBox2.Text To TextBox4.Text
 
            Try
                seite = "szukaj.gazetawyborcza.pl/archiwum/1,0," & i & ".html"
                WebBrowser1.Navigate(seite)
                TextBox1.Text = seite
 
                ' Hier wird gewartet bis der Browser fertig geladen hat
                While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
                    'Debug.WriteLine(WebBrowser1.ReadyState)
                    Application.DoEvents()
                End While
 
                ' Datei wird als Stream zum lesen bereitgestellt
                seitenStream = WebBrowser1.DocumentStream
                sr = New StreamReader(seitenStream, Encoding.GetEncoding( _
                  "iso-8859-2"))
 
                ' Die Seite wird geleseun und in ihre relevanten Bestandteile 
                ' zerlegt
                Site = sr.ReadToEnd()
                artikel = cut(site, "<artykul>", "</artykul>")
                    rawDate = cut(artikel, "</mutacja>", _
                      "</metryczka>").Substring(8, 19)
                    datumArray = Split(rawDate, "/")
                    year = datumArray(2).Substring(0, 4) ' Beim auslesen muss 
                    ' noch eine Restzeichenkette vom Jahr weggeschnitten werden
                    datum = year & "-" & datumArray(1) & "-" & datumArray(0)
                    titel = cut(artikel, "<tytul>", "</tytul>") ' 
                    ' teilweise steht der Titel auch in <cykl>ZAPROSZENIA</cykl>
                    teil = cut(artikel, "<mutacja>", "</mutacja>")
                    text = cut(artikel, "<tekst>", "</tekst>")
                    text = removeTags(text)
 
                    ' Prüfen ob ein Ordner mit der Jahreszahl existiert und 
                    ' sonst erstellen
                    createDirectory(rootPath & year)
 
                    ' Dateiname wird erstellt
                    dateiname = datum & " GW " & nummer & " " & i & ".txt"
 
                    ' Daten werden in die Datei geschrieben
                    sw = New StreamWriter(rootPath & year & "\" & dateiname)
                    sw.WriteLine("Datum: " & datum)
                    sw.WriteLine("Titel: " & titel)
                    sw.WriteLine("Nummer: " & nummer)
                    sw.WriteLine("Teil: " & teil)
                    sw.WriteLine("Text: " & text)
                    sw.WriteLine()
                    sw.WriteLine(artikel)
 
                    'Resourcen freigeben
                    seitenStream.Dispose()
                    sr.Dispose()
                    sw.Dispose()
 
                    'Iterationsschritt(anzeigen)
                    TextBox2.Text = i
 
                    'Speicher freigeben
                    If i Mod 500 = 0 Then
                    GC.Collect()
                    GC.WaitForPendingFinalizers()
                    GC.Collect()
                    GC.WaitForPendingFinalizers()
                    End If
 
            Catch ex As Exception
            End Try
        Next
 
    End Sub
Ich habe extra alle Variablen außerhalb der Schleife initialisiert und gebe die Resourcen aller Stream mit Dispose() frei. Woran kann es liegen, dass das Programm immer mehr Daten im Speicher anhäuft. Die Garbage Collection hilft auch nicht weiter...
Ich hoffe jemand hat einen guten Rat, da das Program mehrere Millionen Dateien laden soll und somit immer wieder neu gestartet werden müsste...
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Programm müllt den Speicher voll aber warum?2.351nero-1516.02.08 22:48

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel