Lesen Sie Große TXT-Datei, die Out-of-Memory-Ausnahme

Ich Lesen wollen große TXT-Datei eine Größe von 500 MB,
Zuerst benutze ich

var file = new StreamReader(_filePath).ReadToEnd();  
var lines = file.Split(new[] { '\n' });

aber es throw out of memory-Ausnahme dann habe ich versucht zu Lesen, Zeile für Zeile, aber nach dem Lesen wieder rund 1,5 Millionen Zeilen werfen out-of-memory-Ausnahme

  using (StreamReader r = new StreamReader(_filePath))
         {            
             while ((line = r.ReadLine()) != null)            
                 _lines.Add(line);            
         }

oder ich

  foreach (var l in File.ReadLines(_filePath))
            {
                _lines.Add(l);
            }

aber Wieder erhielt ich

Eine Ausnahme des Typs " System.OutOfMemoryException " ist in
"mscorlib".die dll wurde aber nicht behandelt werden, in Benutzer-code

Meine Maschine ist eine leistungsstarke Maschine mit 8GB ram also sollte es nicht werden, meine Maschine problem.

p.s: ich habe versucht, öffnen Sie diese Datei in NotePadd++ und ich erhielt 'die Datei ist zu groß, um geöffnet zu werden' Ausnahme.

Was ist die Frage? Sie sind nur Dinge beschreiben würde.
Was ist der Punkt der Speicherung von allen, die in einer Sammlung?
Sie sprechen über "500 Zeilen," aber wie groß ist die Datei, in Bezug auf bytes und Zeichen? 500 Zeilen mit 80 Zeichen sollte kein problem sein - 500-Linie von einer Milliarde Zeichen pro Zeile eindeutig ist.
500-GB-Datei in 8 GB Speicher? Das wird nicht passen. Sie müssen einen anderen Weg finden, der die Verarbeitung der Datei,, die nicht erfordert, die ganze Sache in Erinnerung. Prozess pro Zeile (oder vielleicht pro kleine Menge von Linien)
Sie können das Problem beheben, indem Sie nicht laden Sie die gesamte Datei im Speicher. Klar, Ihr design ist nicht geeignet, um die Anforderungen der Anwendung. Was werden Sie schließlich mit den Daten tun? Jede Bearbeitung, Filterung etc? Vielleicht müssen Sie es speichern in eine Datenbank ersten.

InformationsquelleAutor Behnam | 2012-11-16

Schreibe einen Kommentar