Wie lese ich am besten eine Datei in die Liste & lt; string & gt;
Bin ich über eine Liste die Dateigröße beschränken, da der Gegner beschränkt sich in der Festplatte und ram.
Dies ist, was ich jetzt mache, aber gibt es da eine effizientere Möglichkeit?
readonly List<string> LogList = new List<string>();
...
var logFile = File.ReadAllLines(LOG_PATH);
foreach (var s in logFile) LogList.Add(s);
InformationsquelleAutor der Frage jacknad | 2011-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit
logFile
ist ein array, können Sie übergeben es an dieList<T>
Konstruktor. Dies verhindert unnötigen Aufwand bei der Iteration über das array, oder mit anderen IO-Klassen.Eigentliche Konstruktor-Implementierung:
InformationsquelleAutor der Antwort Evan Mulawski
Wieder ein kleines update zu Evan Mulawski Antwort um es kürzer zu machen
List<string> allLinesText = File.ReadAllLines(fileName).ToList()
InformationsquelleAutor der Antwort Rama
Warum nicht mit Hilfe eines Generators statt?
Dann können Sie es verwenden, wie Sie möchten, verwenden Sie die Liste:
Natürlich, wenn Sie brauchen, um eine
List<string>
dann müssen Sie halten den gesamten Inhalt der Datei in den Speicher. Es gibt wirklich keinen Weg darum herum.InformationsquelleAutor der Antwort Daniel Pryden
Nicht speichern Sie es, wenn möglich. Lesen Sie einfach durch, wenn man den Speicher begrenzt. Sie können einen StreamReader:
Diese gewickelt werden kann in einer Methode, die Erträge strings pro Zeile Lesen, wenn Sie möchten verwenden von LINQ.
InformationsquelleAutor der Antwort Deleted
[Bearbeiten]
Wenn Sie dabei sind, dieses zu trimmen ist der Beginn einer log-Datei, können Sie vermeiden, laden Sie die gesamte Datei von etwas wie dies:
Vor allem, da
File.ReadAllLines
lädt die gesamte Datei in einen string-array (string[]
), das kopieren in eine Liste ist überflüssig.Zweitens müssen Sie verstehen, dass ein
List
erfolgt mit Hilfe eines dynamischen Arrays unter der Haube. Dies bedeutet, dass die CLR die Notwendigkeit zu vergeben, und kopieren Sie mehrere arrays, bis es Platz für die gesamte Datei. Da die Datei bereits auf der Festplatte, sollten Sie erwägen, den Handel Geschwindigkeit für den Speicher und arbeiten auf der Festplatte die Daten direkt oder Verarbeitung in kleinere Stücke.Wenn Sie brauchen, um laden Sie es vollständig in den Speicher, zumindest versuchen, zu verlassen und in ein array:
Wenn es wirklich sein muss ein
List
-, Last-Linien eins nach dem anderen:Hinweis:
List<T>
hat einen Konstruktor nimmt einen parameter Kapazität. Wenn Sie die Anzahl der Zeilen wissen im Voraus, können Sie vermeiden, dass mehrere Zuwendungen von preallocating das array im Voraus:Sogar noch besser, vermeiden Sie es, die gesamte Datei in den Speicher und Prozess "on the fly":
InformationsquelleAutor der Antwort Groo
InformationsquelleAutor der Antwort User2325641
ich würde vorschlagen, diese... von Groo ' s Antwort.
InformationsquelleAutor der Antwort Amit Ranjan
Ich benutze auch die Umwelt.NewLine.toCharArray als gut, aber das hat nicht funktioniert auf ein paar Dateien, die am Ende Tat in \r\n". Entweder versuchen, und ich hoffe, es funktioniert gut für Sie.
InformationsquelleAutor der Antwort vSteve