Heim >Backend-Entwicklung >C++ >Ist C „ifstream' immer langsamer als „fscanf'?
Verschiedene C-Benutzer, die C gelernt haben, bevorzugen aufgrund der zugänglichen Schnittstelle und der Verwendung der printf/scanf-Funktionsfamilie auch beim Codieren in C weiterhin Lokalisierungsfunktionen. Beim Vergleich mit dem ifstream von C können jedoch Leistungsbedenken auftreten. Insbesondere wird beobachtet, dass fscanf durchweg ifstream übertrifft.
Um die Leistung von IOStreams zu verbessern, sollten Sie die folgenden Techniken in Betracht ziehen:
Durch Erhöhen der Puffergröße werden Festplattentreffer und Systemaufrufe reduziert, wodurch die Leistung verbessert wird. Legen Sie den Puffer fest, indem Sie mit pubsetbuf() auf die Streambuf-Implementierung zugreifen.
char Buffer[N]; std::ifstream file("file.txt"); file.rdbuf()->pubsetbuf(Buffer, N);
Gebietsschema kann sich aufgrund von Zeichenkonvertierung und komplexen Systemaufrufen auf die Leistung auswirken. Wählen Sie das Standard-C-Gebietsschema, das für minimale Konvertierung und Einheitlichkeit auf allen Maschinen optimiert ist, um diesen Mehraufwand zu vermeiden.
Dieser Parameter zeigte in unseren Tests keine nennenswerten Leistungsverbesserungen .
Unsere Benchmarks mit einem einfachen Testprogramm zeigen unterschiedliche Ergebnisse auf verschiedenen Plattformen und Compiler. Das Ergebnis legt nahe, dass die Leistung von IOStreams von der Implementierung abhängt.
Hier sind die Ergebnisse verschiedener Benchmarks:
g 4.7.2-2ubuntu1, -O3, Ubuntu 11.10 x86_64
g 4.4.5, -O3, Ubuntu Linux 10.10 x86_64
g i686-apple-darwin10-g -4.2.1 (GCC) 4.2.1, Mac mini, 4 GB RAM
clang 3.8.0-2ubuntu4, Kubuntu 16.04 Linux 4.8-rc3
Diese Ergebnisse unterstreichen die Bedeutung der Implementierungsqualität bei der Leistungsoptimierung von IOStreams.
Das obige ist der detaillierte Inhalt vonIst C „ifstream' immer langsamer als „fscanf'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!