Good Morning,
hätte da mal 'ne Frage. Folgendes:
Ich habe ein Programm, dass eine unbekannte Anzahl von Dateien in einem Ordner auflisten soll und diese nacheinander durchsuchen soll, ob ein bestimmter String vorhanden ist und den Text aus der nächsten Zeile ebenfalls in ein Array speichern soll. Das auflisten der Dateien funktioniert tadellos. Allerdings wird beim durchsuchen der einzelnen Dateien die Speicherauslastung von 20Megabyte auf ganze 500MB erhöht und ich bekomme eine System.OutOfMemoryException.
Zum Verständis der Code:
Mal davon abgesehen, dass der Code wahrscheinlich ziemlich unsauber geschrieben ist... Wie kann ich den Code Performance und Arbeitsspeicher-Freundlicher gestalten? Oder wo liegt der Fehler? Ich wüsste derzeit nicht, wie ich es anders machen könnte.
LG
Franzbauer
hätte da mal 'ne Frage. Folgendes:
Ich habe ein Programm, dass eine unbekannte Anzahl von Dateien in einem Ordner auflisten soll und diese nacheinander durchsuchen soll, ob ein bestimmter String vorhanden ist und den Text aus der nächsten Zeile ebenfalls in ein Array speichern soll. Das auflisten der Dateien funktioniert tadellos. Allerdings wird beim durchsuchen der einzelnen Dateien die Speicherauslastung von 20Megabyte auf ganze 500MB erhöht und ich bekomme eine System.OutOfMemoryException.
Zum Verständis der Code:
VB.NET-Quellcode
- Dim ctilist As New List(Of String)
- Dim actual_selected_vehicle As String = real_omsi & CStr(cmb_vehicle_in_repgroup.Items.Item(cmb_vehicle_in_repgroup.SelectedIndex))
- Dim path_wf As String = My.Computer.FileSystem.GetParentPath(actual_selected_vehicle)
- Dim itemlist As New List(Of String)
- '' Alle CTI-Dateien in Liste aufnehmen
- For Each datei In My.Computer.FileSystem.GetFiles(real_omsi, FileIO.SearchOption.SearchAllSubDirectories, "*.cti")
- If datei.Contains(path_wf) Then
- ctilist.Add(datei)
- End If
- Next
- '' Jede Datei öffnen und durchgehen
- For cticount As Integer = 0 To ctilist.Count - 1
- Dim cti As String = My.Computer.FileSystem.ReadAllText(ctilist(cticount))
- Dim Splitted() As String
- Splitted = cti.Split(CChar(vbNewLine))
- Dim zeilen As Integer = Splitted.Count
- For lines As Integer = 0 To zeilen - 1
- If Splitted(lines).Contains("[item]") Then
- If itemlist.Count = 0 Then
- itemlist.Add(Splitted(lines + 1))
- Else
- For item As Integer = 0 To itemlist.Count - 1
- If Splitted(lines + 1) = itemlist(item) Then
- Else
- itemlist.Add(Splitted(lines + 1))
- End If
- Next
- End If
- End If
- Next
- Next
- For Each itemtoadd In itemlist
- list_wgrp.Items.Add(itemtoadd)
- Next
Mal davon abgesehen, dass der Code wahrscheinlich ziemlich unsauber geschrieben ist... Wie kann ich den Code Performance und Arbeitsspeicher-Freundlicher gestalten? Oder wo liegt der Fehler? Ich wüsste derzeit nicht, wie ich es anders machen könnte.
LG
Franzbauer
Ich hasse es wenn einem direkt vorgeworfen wird, ohne dass die Frage überhaupt durchgelesen wurde, dass man nur fertien Code will. Schade dass es sich hier so entwickelt hat
"Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!
"Windows Vista Home Premium x32" - Wann kapieren endlich alle, dass es kein "x32" gibt? 32 Bit oder x86!