C++ hat drucken auf terminal deutlich verlangsamen code?
Ich habe einen code, wo ich derzeit drucken eine Menge von Diagnose-Nachrichten-terminal. Hat jemand eine Idee, wie viel diese verlangsamt meinen code? Würde ich eine große Geschwindigkeit zu erhöhen, durch umleiten der Ausgabe in eine Datei, z.B. anstelle der Ausführung:
./my_program
ich laufen
./my_program > output.log
Außerdem würde ich eine weitere Erhöhung der Geschwindigkeit durch ersetzen cout mit ofstream und schreiben auf Datei direkt?
EDIT: nehmen wir an, ich Schreibe auf /dev/shm, Zugriff auf die Festplatte-Geschwindigkeit nicht wirklich ein Problem.
- Interessante Frage, die +1 von mir. Zeit,
time ./my_program > output.log 2>&1
und sehen, was Ergebnisse Sie bekommen sind, dann vergleichen Sie es mittime ./my_program > output.log 2>&1 &
(Gabel im hintergrund), und verwenden Siemultitail output.log
um die Ausgabe von einem anderen terminal. Es hängt von der cpu-Last, Dienstleistungen, Prozesse, RAM... - Sie könnten einfach ein Profil und finden Sie heraus,... (!)
- Ich weiß, dass Sie zurück in den alten Tagen von Windows 95, Sie könnten drücken Sie Alt+EINGABETASTE wechseln Sie die DOS-box in den text-Modus und dann Programme liefen viel schneller.
- Versuchen Sie, den Druckauftrag über einen anderen thread und kostenlos dein Hauptprogramm-thread. Das sollte deutlich beschleunigen Ihre Leistung. Überprüfen Sie dies: superuser.com/a/312955
- Sie könnten in der Lage sein, schneller zu bekommen die Ausgabe der Konsole durch Pufferung und/oder durch ändern der buffer-Größe. Siehe en.cppreference.com/w/cpp/io/c/setvbuf
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, rendering auf dem Bildschirm dauert länger als das schreiben in eine Datei.
In windows ist es sogar langsamer als das Programm, das rendering ist nicht das Programm, das ausgeführt wird, also es gibt ständig Nachrichten zwischen Prozessen, um es zu bekommen angezogen.
Ich denke, es ist dasselbe in linux, da das virtuelle terminal ist auf einen anderen Prozess als den, der ausgeführt wird.
Es kann sicherlich sein. Drucken auf einem terminal beinhaltet, rendering und andere Dinge, die (nicht-trivial) und ist in der Regel gepuffert, viel weniger. Das Betriebssystem und die stream-Implementierung kann viel mehr tun, Pufferung und Zwischenspeicherung mit Datei-I/O.
Wie viel Geschwindigkeit bekommen Sie von verschiedenen Faktoren abhängen. Die Windows-Konsole, zum Beispiel, ist notorously langsam.
ofstream
könnte werden slighlty schneller alscout
je nach yor libc++ - Implementierung (unterschiedliche puffergrößen, thread-Synchronisation, ...)Dies ist schwer zu sagen, ohne Messen ein bestimmtes system, aber ich vermute, dass das schreiben in eine Datei wäre in der Tat schneller als das schreiben auf dem display (Dateien müssen nicht scrollen etc).
Je nach OS, das system und die Bibliotheken, das schreiben in eine
ofstream
direkt könnte erhöhen Sie die Leistung noch mehr, wenn es eine andere Pufferung Schema im Vergleich zucout
aber es hätte keinerlei Auswirkungen. Der einzige Weg, um sicher zu wissen ist es, das Profil der code (wie schon in einem Kommentar).Es hängt wirklich davon ab, wie viel Sie drucken.
Wenn Ihr Programm drucken 50 oder mehr Zeilen pro Sekunde, dann ich Wette, Ausgang beginnt zu relevant werden.
Ausgabe in eine Datei ist auf jeden Fall viel schneller als das drucken aus einem terminal, obwohl Sie eine andere terminal-Programme unterscheiden sich deutlich in Ihrer Geschwindigkeit, je nachdem, wie viel Rendern Sie tun und was Sie für die rendering-api.
Ich sehr viel Zweifel, es ist jede erhebliche performance-Unterschied für cout vs. ofstream für die Ausführung der terminal-Druck-oder sogar die Ausgabe in eine Datei. Gibt es vielleicht einen sehr kleinen performance-Gewinn, wenn man schrieb, log Linien mit fwrite. Letztlich Dinge wie cout rufen fwrite, so können Sie sich eine kleine Verbesserung, die nur durch Berufung auf das niedrigste Niveau selbst.
Schließlich - output-streams wie cout schneller sind als Fehler-streams wie cerr. Cout wird mehr tun, als Pufferung cerr, kann dies die Leistung erheblich beschleunigt. Aber es sieht aus wie Sie mit cout bereits.
In der Regel ja. Wenn Sie nicht haben, um zu schreiben, um das terminal, können Sie eine Datei verwenden. Sie können auch /dev/null, wenn es keine Notwendigkeit, um die Ausgabe zu sehen.(Zum Beispiel, um zu Messen, tatsächliche Geschwindigkeit ...)