Kann man diese Funktion vereinfachen?
-
Hier ist sie
unsigned int CAnalyze::Check_Players() { for(int i=0; i<vplayer.size(); ++i) { //Dateien öffnen // Funktion ausführen playerLogfile.clear(); playerLogfile.seekg(0); // Funktion ausführen playerLogfile.clear(); playerLogfile.seekg(0); // Funktion ausführen // Dateien schließen } return(1); }
Erklärung; Ich habe einen Vektor der viele IDs enthält, für jede ID soll eine Datei erstellt werden und durch bestimmte funktionen wird sie dann gefüllt.
Das dumme ist: Das schließen von Dateien dauert verdammt lange, sprich datei.close() frisst richtig performance.
Deshalb war meine Idee ich öffne eine Datei, rufe die erste Funktion auf und übergebe eine Referenz auf sie, setzt danach wieder den Lesezeiger auf Position 0, rufe zweite Funktion auf usw. anstatt in jeder der Funktionen extra einen Strom anzulegen und die Datei dann zu schließen.Am ende wird die datei geschlossen und mit der nächsten id begonnen.
Es geht, ist aber unübersichtlich.
Habt ihr eine bessere Idee?
-
Das dumme ist: Das schließen von Dateien dauert verdammt lange, sprich datei.close() frisst richtig performance.
Aehm, meinst du ? :p
Ich vermute du nimmst nen normalen ofstream, oder ?
Normal puffert aber das BS deine eingabe, und beim schliessen schreibt es die daten erst wirklich rein. Hast mal wenn fertig bist nen flush probiert ? dauert das close dann immer noch so lange ???Ciao ...
-
*grübel*
Erst beim schließen wird also geschrieben, und deswegen braucht er so lange meinst du?
Dann dürfte sich das zeitlich aber eigentlich nichts tun ob ich kurz was schreibe, datei schließe, kurz was schreibe datei schließe, kurz was schreibe datei schließe ODER wie es jetzt ist lange was schreibe datei schließe.
Es geht aber wesentlich schneller wenn man in einem zug schreibt, und das hängt mit dem close zusammen.
Das mit dem flush habe ich nicht getestet
-
RHBaum schrieb:
Hast mal wenn fertig bist nen flush probiert ? dauert das close dann immer noch so lange ???
Educated guess: das close geht dann verdammt schnell, aber das flush dauert so lange wie vorher das close