Performance Textdatei einlesen
-
Hallo Gemeinde,
ich muß in einem Softwareprojekt eine Datei im Textmodus einlesen welche auch mehrere Megabyte groß sein kann. Da die Perfomance nicht unwichtig ist, würde mich mal Eure Erfahrungen dazu interessieren, was schneller ist:
A) Einlesen mit fread
Einlesen mit streams (get....)Gruß
Olli
-
Mach es doch direkt auf API-Ebene deines Betriebssystems, wenn es wirklich schnell sein muss.
-
bei a) ist O(e(ln(sqrt(1-x2))))
bei b) dagegen nur O(e^(ln(ln(1/x))))also b!
-
Hallo...,
@Dirk:
Ich möchte schon plattformunabhängig bleiben.
@Algorithmiker
Hallo? Wie untermauerst du deine e-Funktion? Ich glaube gerne deine Behauptung, aber gehts auch für Nichtmathematiker? Vielleicht etwas sprechender?Gruß
Olli
-
hmm also ich würd vorschlagen du nimmst ne quarz uhr oder ähnliches und guggst druff
/* fread example: read a complete file */ #include <stdio.h> #include <stdlib.h> int main () { FILE * pFile; long lSize; char * buffer; pFile = fopen ( "myfile.txt" , "rb" ); if (pFile==NULL) exit (1); // obtain file size. fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile); rewind (pFile); // allocate memory to contain the whole file. buffer = (char*) malloc (lSize); if (buffer == NULL) exit (2); // copy the file into the buffer. fread (buffer,1,lSize,pFile); /*** the whole file is loaded in the buffer. ***/ // terminate fclose (pFile); free (buffer); return 0; }
oder hier
// istream get #include <iostream> #include <fstream> using namespace std; int main () { char c, str[256]; ifstream is; cout << "Enter the name of an existing text file: "; cin.get (str,256); is.open (str); // open file while (is.good()) // loop while extraction from file is possible { c = is.get(); // get character from file cout << c; } is.close(); // close file return 0; }
-
@OlliNRW: Ich bin nur ein dummer Troll. War alles Blödsinn.
Die Groß-O-Notation für Komplexitäten gibt es aber wirklich. Ist schon interessant. Es gibt da ja auch viel einfaches, z.B. O(n), O(n^2), O(log(n))...
-
also mein rechner macht beides bei wenigen mb in wenigen sekunden ich denke ...
bei dir wirds auch net anderst sein und wenn doch mach multithreads splitte die datei und mach n ma eine der funktionen
-
1ntrud0r:
deine beiden sources sind nicht gleich.
variante 1 ist wesentlich schneller - denn du liest ALLES auf einmal. was bei Variante 2 nicht der Fall sein muss.in großen stücken lesen ist immer besser als in kleinen.
(sofern man auch die ganze datei braucht ;))
-
Hallo 1ntrud0r,
danke für deine Hilfe. Ich denke es wird wahrscheinlich rel. egal sein, ich machs dann mit den Streams. Wäre ja noch interessant welche Dateigrößenbestimmnung schneller ist:
A) mit stat (_stat)
oder
.seekg/.tellgWahrscheinlich auch egal, es sei denn der Algorithmiker hat schon wieder eine tolle Formel parat.
Gruß
Olli