Sto provando a migrare un programma C# in C++. Il programma C# legge un file di testo da 1 ~ 5 gb riga per riga e fa alcune analisi su ciascuna riga. Il codice C# è come sotto.Prestazioni di lettura di file di testo C++
using (var f = File.OpenRead(fname))
using (var reader = new StreamReader(f))
while (!reader.EndOfStream) {
var line = reader.ReadLine();
// do some analysis
}
Per un dato file da 1,6 GB con 7 milioni di righe, questo codice impiega circa 18 secondi.
Il C++ codice che ho scritto prima di migrare è come sotto
ifstream f(fname);
string line;
while (getline(f, line)) {
// do some analysis
}
Il codice C++ porta sopra circa 420 secondi. Il secondo codice C++ che ho scritto è come sotto.
ifstream f(fname);
char line[2000];
while (f.getline(line, 2000)) {
// do some analysis
}
Il C++ sopra richiede circa 85 secondi.
L'ultimo codice che ho provato è il codice c, come di seguito.
FILE *file = fopen (fname, "r");
char line[2000];
while (fgets(line, 2000, file) != NULL) {
// do some analysis
}
fclose (file);
Il codice c in alto impiega circa 33 secondi.
Entrambi gli ultimi 2 codici, che analizzano le righe in char [] anziché in string, necessitano di circa 30 secondi in più per convertire char [] in string.
C'è un modo per migliorare le prestazioni del codice c/C++ per leggere un file di testo riga per riga per abbinare le prestazioni C#? (Aggiunto: Sto utilizzando Windows 7 a 64 bit OS con VC++ 10.0, 64)
La tua domanda è simile a questa discussione http://stackoverflow.com/questions/7102087/how-to-enhance-the-speed-of-my-c-program-in-reading-delimited-text-files/ 7102179 # 7102179 –
Una domanda interessante potrebbe essere: come lo fa C#? Questo ti darà alcune informazioni su quali ottimizzazioni hanno usato e probabilmente ne suggeriscono alcune. – ssube