2017-10-09 3 views
0

Die folgende Situation: Ich bearbeite eine einzige Methode in einem großen Programm, das sehr oft aufgerufen wird, aber ich weiß nicht, wie oft genau (für jeden Lauf anders).Verbesserung der Leistung in fopen/fclose Szenario

Jetzt muss ich Protokollierung zu einer TXT-Datei hinzufügen, und das Öffnen/Schließen der Datei bei jedem Aufruf ist ein riesiger Engpass für die gesamte Anwendung.

Nur die Datei offen zu lassen ist nicht wirklich eine Option, weil ich nicht weiß, ob es der letzte Aufruf an diese Funktion ist.

Gibt es eine Möglichkeit, dies zu beschleunigen, ohne die aufrufende Site zu ändern?
Ich würde lieber vermeiden, die Methodensignatur zu ändern, da dies Probleme verursachen würde, wenn wir die Arbeit mit meinen Mitarbeitern kombinieren (keine funktionierende Versionssteuerung)

+3

Öffnen und schließen Sie die Datei nicht bei jedem Aufruf. Die Datei wird geleert und geschlossen, wenn Ihr Programm normal beendet wird. Sie sollten wahrscheinlich 'fflush()' nach jedem Protokollierungsaufruf verwenden (obwohl das einen Overhead hat). Aber öffne/schließe nicht jeden Anruf - es ist zu langsam. Betrachten Sie den Append-Modus - das ist wahrscheinlich eine gute Idee. Sie müssen die Schnittstelle zu den Funktionen nicht ändern. Sie erstellen einfach eine 'static FILE * stdlog = 0;' - Variable im Dateibereich, und wenn der Zeiger beim Protokollieren null ist, öffnen Sie die Datei. Danach verwenden Sie 'stdlog' als Protokolldatei-Stream. Wenn Sie 'stdlog' nicht riskieren möchten, versuchen Sie' log_fp'. –

+0

Verwenden Sie einen Puffer für die Protokollierung, sobald der Protokollpuffer voll ist, schreiben Sie ihn in die Datei. –

+3

Und im 20. Jahrhundert war keine funktionierende Versionskontrolle ein dummer Fehler (Angriff). Im 21. Jahrhundert ist es lächerlich unprofessionell. –

Antwort

1

Lassen Sie die Datei geöffnet. Alle Dateien werden geschlossen (wobei alle ausstehenden Puffer entfernt werden), wenn Ihr Programm aufruft oder von main zurückkehrt. Es gibt keinen Grund, sich darum zu kümmern, ob ein Aufruf der Protokollfunktion der "letzte Aufruf" ist.

0

Ein Zusatz zu R .. answer, Sie könnten auch den Interrupt oder beenden Signal und schließen Sie die Datei selbst.

Verwandte Themen