| |

VB.NET - Ein- und UmsteigerProgramm 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... |  |
 Programm müllt den Speicher voll aber warum? | 2.351 | nero-15 | 16.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 |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevPopUp 2.0 
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|
|
|
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
|
|