Speicher läuft voll mit StreaReader Hilfe!!

exiter28

Erfahrenes Mitglied
Hallo,

ich hab da ein größeres Problem. Ich lese mit folgendem Code eine Textfile aus:

Code:
        public static void LoadListBoxTemp(ListBox lb)
        {
            lb.Items.Clear();
            string searchstr, hittemp;
            string[] hit;
            string[] lbarray = IniClass.FileToArray(IniClass.textfile);
            System.IO.StreamReader sr = new StreamReader(IniClass.textfile);
            searchstr = sr.ReadToEnd();
            sr.Close();
            hit = searchstr.Split('\n');
            for (int i = 0; i < hit.Length; i++)
            {
                hittemp = hit[i];
                if (hittemp != "")
                {
                    lb.Items.Add(hittemp);
                }
            }
            searchstr = null; hittemp = null;
        }

Bei kleineren Dateien funktioniert das wunderbar, nur bei etwas größeren Textdateien
läuft mir der Speicher voll über 600MB******

Kann mir einer sagen, was das Problem hier ist?

Danke Euch schon mal...
 
Das lässt sich so schwer sagen, da ich nicht weiß, wo das genau auftritt.

Aber ein paar Hinweise:
Da du deine String sowieso in "Zeilen" splittest kannst du auch gleich StreamReader.ReadAllLines() nutzen und dir so die ganze String-Kopiererei sparen (könnte das Problem schon minimieren)

Desweiteren solltest du den StreamReader in einem using-Statement nutzen, da die Klasse (bzw. die Basisklasse) IDisposable implementiert

Dann hast du mehrere Variablen, die unützt sind. Und zwar searchstr (jedenfalls ab Verwendung von ReadAllLines), hittemp, lbarray
 
Hallo Jungs,

erst mal besten Dank für Eure schnelle Hilfe!! das ist immer das beste in diesem Forum!! Danke!
Ich hab mir da eine Grube gebaut, in der ich selbst getappt bin. Ausser den o.g. code nutze ich
noch einen anderen, welcher bestimmte Einträge ersetzt. Und der war der Auslöser, durch einen
Fehler in einer Schleife, wurde die Textfile immer größer und größer ,....... bis diese schließlich fast 100MB groß war und im Hintergrund der Reader nicht mehr mitgekommen ist, einzulesen mit o.g. Code :)

@CPoly
mit ReadLine bekomme ich das nicht hin, weil ich den ges. Inhalt der File Splitten muss, damit ich
die Zeilen dann gleich in ein Array schreiben kann (hit[]). Deshalb, readtoend();

@Nico
das using benutze ich doch bereits mit using System.IO;
oder?


Danke Euch !!
 
@Nico
Danke für den Link. Aber ich werde immer noch nicht schlau daraus....

Wie müsste dann der o.g. Code aussehen?
einfach als Beispiel, vielleicht versteh ich es dann.
Leider bin ich noch immer Anfänger was C anbelangt.

Dank Dir
 

Neue Beiträge

Zurück