C# StreamReader beschleunigen

Stephan78

Ensign
Registriert
Sep. 2010
Beiträge
162
Hallo,

ich habe eine Anwendung, in der ein ca. 8000 Zeilen langes txt-File
via Streamreader mittels der Standardprozedur "for each line in lines" durchsucht und ein Wert ausgegeben wird.
Dieser Vorgang erfolgt ca. 4000mal . Das Ganze geht so langsam, dass
es nicht mehr lustig ist. Lässt sich die Prozedur beschleunigen, in dem
man einmal am Anfang die gesamte txt-Datei in ein String-Array schiebt
und dieses dann jeweils nach den Werten durchsucht?
Oder gibts noch bessere Möglichkeiten?

Besten Dank im Vorraus!
 
ja, ab in den speicher damit.
je nachdem was du damit machst, kannst die datei auch gleich in mehrere arrays oder evtl. dictionarys zerteilen und von entsprechend vielen threads parallel bearbeiten lassen, und/oder dem verfügbaren speicher entsprechend sequentiell.
festplattenzugriffe sind wirklich das teuerste bei solchen geschichten.
 
der knackpunkt ist die datenstruktur auf der gesucht wird. wegen festplattenzugriffen würde ich mir keine sorgen machen, diese fuzel-txt-datei liegt beim ersten zugriff bereits im cache.

wenn ich das richtig verstanden habe, suchst du in der datei 4000 mal. aus diesem grund würde ich dir diese datenstruktur empfehlen.

dabei ist die indexliste eine hashmap, die auf ein array mit den wortpositionen zeigt.
 
Sofern du keine Zuweisung zu einer Varibale benötigts. Kann ich dir auch empfehlen eine for-Schleife anstatt einer foreach-schleife zu verwenden.

Ich weiß nciht inwiefern das bei dir einen wirklichen Unterschied macht, hab aber selbst bei mir, an einem größeren Projekt, gemerkt das die for-schleife schneller als die foreach-Schleife läuft.

Hoffe das hilft dir noch was ;)
 
[GP] mino schrieb:
der knackpunkt ist die datenstruktur auf der gesucht wird. wegen festplattenzugriffen würde ich mir keine sorgen machen, diese fuzel-txt-datei liegt beim ersten zugriff bereits im cache.

nur wenn man ein memorystream-objekt anstatt filestream benutzt.
 
TheOtherSide schrieb:
Sofern du keine Zuweisung zu einer Varibale benötigts. Kann ich dir auch empfehlen eine for-Schleife anstatt einer foreach-schleife zu verwenden.

Ich weiß nciht inwiefern das bei dir einen wirklichen Unterschied macht, hab aber selbst bei mir, an einem größeren Projekt, gemerkt das die for-schleife schneller als die foreach-Schleife läuft.

Hoffe das hilft dir noch was ;)

Bei Arrays macht der Compiler aus dem foreach einfach ein for - dort gibt es also keinerlei Unterschiede. Bei allen anderen Datenstrukturen wird jedoch ein Enumerator benötigt, wessen "Müll" nach dem Durchlauf in den Garbage Collector kommt.
 
Zurück
Oben