Anzeige

schnellste weg ein textfile auszulesen


#1
Hi Leute.

Folgendes, wie der Titel schon sagt möchte ich ein Textfile Zeile für Zeile auslesen und dies auf dem schnellsten Weg, da diese Textfiles auch schonmal 20 bis 40 mb haben können. Ich habe als referenz ein fremdes Programm das dies in unfassbarer Geschwindigkeit tut wobei meins ewig braucht.

Ich lese zum Beispiel erst das Komplette File in ein String array und arbeite dann mit diesem Array.Trotzdem braucht er noch ewig obwohl alles über dieses Array geht.

Mach ich da Grundsätzlich etwas falsch? Wie gesagt die Zeitunterschiede zu dem fremdem Programm sind enorm.
 
#2
Hi

wie enorm? (Aus Interesse, ist das Schnelle irgendein bekanntes Programm bzw. was ist es?)
Was genau machst du mit dem Stringarray?
(da scheinbar auch die Bearbeitung im Array langam ist liegts wohl nicht am Auslesen der Datei...)
Muss deine Version in .NET sein?
 
#3
nein ist kein bekanntes programm.
Was mein Programm und das andere Programm ist: Zeile für Zeile auslesen und diese einzelnen Zeilen mit einer Regex anweisung auswerten mehr nicht.
Enorm heisst das Fremde Programm braucht ca. 30 SEK und meins 3 minuten.

Mit .net bin ich auf dem neuesten Stand.
 

Spyke

Capoeirista
Premium-User
#4
dein erstes problem ist erste mal das du die datei sofort komplett einliest.
wenn ich das richtig verstehe interessieren dich eh blos die einzelnen zeilen.
da könntest du zum beispiel direkt den StreamReader verwenden und die datei mittels ReadLine() zeilenweise auslesen.

Ansonsten denke ich nicht das es an der größe der datei liegt das du 3 min. brauchst, sondern die frage wäre eher wie wertes du den text aus.
Arbeitest du zum Beispiel mit List<T> das wäre zum Beispiel mit einer der langsameren Listen, dort auf andere strukturen umzusteigen bringt schon häufig eine menge.

Edit: Wie zum Beispiel iterierst du durch das array?
 
#5
Wie gesagt ich lese die Datei komplett in ein array.Dieses Array lass ich zeile für Zeile über eine for Schleife auslesen und vergleiche sie mit einer Regex anweisung welche über eine If bedingung abgefragt wird.

Direkt auslesen mit Streamreader von der Datei hab ich vorher gemacht.Das erscheint mir noch langsamer :)
 

Spyke

Capoeirista
Premium-User
#6
Ohne Code lässt sich schwer was sagen.

Und das Array zeile für zeile auslesen klingt für mich auch so als wenn du schleife in schleife läufst, das könnten schon performance nachteile sein, wenn man nicht richtig drauf achtet.

Wäre auch interessant wie das Regex aussieht, was ihr sucht.
Muss es überhaupt Regex sein, ev. wäre es auch performanter gezielte zeichen direkt zu suchen.
 
#7
Hallo,

hast du mal überprüft, wo die meiste Zeit verbraten wird, beim reinen Lesen oder bei der Verarbeitung?

Bevor das nicht klar ist, macht es wenig Sinn, über Optimierungen zu diskutieren.

Gruß
MCoder
 

ksk

Erfahrenes Mitglied
#8
Hy,

kannstt mal ein Bsp. wie der Inhalt aussieht posten damit wir dir evtl. auch weiterhelfen können,
und auf welchen kriterien du prüfst bzw. prüfen willst.

Lg
Kadir
 

ksk

Erfahrenes Mitglied
#10
Falls du die Zeilen nach einen bestimmten Suchwert filtern möchtest, dann kannst LINQ ebenfalls verwenden.
Eine ca. 46MB Datei benötigt in diesem Fall keine 2Sek.
Code:
  List<string> rows = new List<string>(new System.IO.StreamReader(Application.StartupPath + "\\inputFile.txt").ReadToEnd().Split(new char[] { '\n' }));

  // Varianet 1: In Linq
  var dnROWS = from row in rows where row.StartsWith("suchwert") select row;
  if (dnROWS.Count() > 0)
  {
  // Suchwert gefunden
  }

  // Varianet 2: In DOT Net Notation
  List<string> dnROWS = rows.FindAll(x => x.StartsWith("suchwert"));
  if (dnROWS.Count > 0)
  {
  // Suchwert gefunden
  }
Lg
ksk
 
Anzeige

Neue Beiträge

Anzeige