Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » fprintf performance probleme

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.06.2007, 00:56 Uhr
struct



Hallo

Ich arbeite zur Zeit an einer kleinen 3D Spiele-Engine und die beinhaltet eine Komponente für ein Logfile. Problem ist jetzt dass die Funktion mit der ich in den Logfile schreibe auf verschiedenen PCs unterschiedlich schnell ist. Um das genauer zu testen hab ich ein Benchmarkprogramm geschrieben das 100 Logfileeinträge schreibt und die Zeit misst die dafür benötigt wurde. Auf meinem Rechner braucht das Programm für die 100 Einträge etwa 40ms. Auf meinem Laptop sind es um die 2600ms ! Und bei nem Freund von mir um die 3000ms!

Die Engine und das Benchmarkprogramm hab ich auf meinem Rechner mit Visual C++ 2005 Express Edition compilliert. Und, falls es von Bedeutung ist, auf den beiden anderen Testrechnern ist Visual C++ 2003 Standard installiert. Kann es denn sein dass es an der installierten VC++ Version liegt? Dürfte doch eigentlich nicht sein denk ich

Hier die Log-Funktion:

Code:
beResult beLogfile::WriteToLogfile(const char* pcFormat, ...)
{
    // cancel if the logfile is not opened
    if ( m_pLogfile == NULL ) { return BE_IMPOSSIBLE; }
    
    char    acText[1024];
    va_list    VAList;

    va_start(VAList, pcFormat);
    vsprintf(acText, pcFormat, VAList);
    va_end(VAList);

    fprintf(m_pLogfile, "%s", acText);
    fflush(m_pLogfile);
    
    return BE_OK;
}



Geöffnet wird die Datei mit:

Code:
m_pLogfile = fopen( pcFilename, "wc" );


Ich hab's auch mit

Code:
m_pLogfile = fopen( pcFilename, "w" );


und ohne fflush probiert. Dann wars deutlich schneller, klar, aber ich will das fflush eigentlich schon da haben. Außerdem ist es auf meinem Laptop dann immernoch langsamer: bei mir: <1ms, Laptop: 15ms.

Ich habe keine Ideen mehr woran es liegen könnte, darum bin ich für jegliche Vorschläge dankbar.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.06.2007, 09:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

fflush löst immer einen Write ein leeren des Schreibpuffers aus - was natürlich bei Laptop-Platten u.U etwas dauert.

Ansonsten ist der VC 2003 selbst im debugmodus schon etwas besser von der Codeerzeugung her, als der VC2005 Express (da da der Compiler etwas abgespeckt ist)

Kann bei den den va_lists schon etwas ausmachen.

Ansonsten solltest du evtl direkt

vfprintf verwenden und dem die Liste übergeben.

Also so:


C++:
    va_start(VAList, pcFormat);
    vfprintf(m_pLogfile, pcFormat, VAList);
    va_end(VAList);

    fflush(m_pLogfile);



da sparste dir das doppelte auswerten der va_listen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.06.2007, 22:32 Uhr
struct



Erstmal danke für deinen Vorschlag. Hab das mit dem vfprintf übernommen. Leider hat das keine Verbesserung wegen der Zeit gebracht.

Nochmal zu dem Debugger: Läuft der auch wenn ich das Programm direkt starte? Also nicht aus VC++05. Weil dann würde sich das Problem ja auf die unterschiedlichen Versionen zurückführen lassen. Was ich dann allerdings nicht verstehe ist warum der 05 schneller ist als der 03, wenn du sagst dass der 03 besseren code erstellt.

Da die Zeiten sich ja so stark unterscheiden schließe ich eigentlich aus dass es an der langsameren Hardware liegt. Der dritte Testrechner ist ja auch ein Desktop PC und der hat Zeiten um die 6000ms für 100 Logs.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: