tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
466
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von exiter28
    exiter28 exiter28 ist offline Mitglied Gold
    Registriert seit
    Apr 2009
    Beiträge
    175
    Hallo,

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

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
            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...
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Wie wärs mit http://msdn.microsoft.com/en-us/libr....readline.aspx ?

    Was du da machst ist ziemlich unnötig, weil du lädst den gesamten Inhalt in den Speicher und wendest dann noch "split" an (was ja den Speicher nochmal verdoppelt). Dabei hast du doch so einen tollen Stream, welchen du gemütlich Teil für Teil durch den Speicher schieben kannst.
    Geändert von CPoly (05.01.11 um 20:56 Uhr)
     

  3. #3
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  4. #4
    Avatar von exiter28
    exiter28 exiter28 ist offline Mitglied Gold
    Registriert seit
    Apr 2009
    Beiträge
    175
    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 !!
     

  5. #5
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von exiter28 Beitrag anzeigen
    @Nico
    das using benutze ich doch bereits mit using System.IO;
    oder?
    Nein, nutzt du nicht!
    using-Direktive != using-Statement
    und letzteres solltest du immer verwenden, wenn du eine Klasse nutzt, die IDisposible implementiert!
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  6. #6
    Avatar von exiter28
    exiter28 exiter28 ist offline Mitglied Gold
    Registriert seit
    Apr 2009
    Beiträge
    175
    @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
     

  7. #7
    irgendwerheute Tutorials.de Gastzugang
    z.B so!

    Mehr Info`s findest Du hier: "http://msdn.microsoft.com/de-de/libr...=VS.80%29.aspx".

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    using (StreamReader sr = File.OpenText(textfile))
    {
        String input;
        while ((input = sr.ReadLine()) != null)
        {
            lb.Items.Add(input);
        }
        sr.Close();
    }
     

Ähnliche Themen

  1. Virtueller Speicher voll!
    Von Kopfballstar im Forum Javascript & Ajax
    Antworten: 13
    Letzter Beitrag: 03.06.08, 14:22
  2. Speicher voll O.o
    Von Stelo im Forum PHP
    Antworten: 6
    Letzter Beitrag: 15.05.07, 17:24
  3. Speicher voll und keine Ahnung warum
    Von the incredible Leitman im Forum Microsoft Windows
    Antworten: 6
    Letzter Beitrag: 31.03.07, 18:05
  4. Apache spamt Speicher voll
    Von mgraf im Forum Hosting & Webserver
    Antworten: 1
    Letzter Beitrag: 07.01.07, 19:29
  5. Speicher läuft voll
    Von Primax im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 01.12.03, 16:51