Wie kann ich das verbessern/ersetzen, sprintf, die habe ich gemessen, um eine performance-hotspot?

Durch profiling habe ich entdeckt, dass der sprintf hier dauert eine lange Zeit. Gibt es eine leistungsfähigere alternative, die immer noch Griffen die führenden Nullen in der y/m/d h/m/s-Felder?

SYSTEMTIME sysTime;
GetLocalTime( &sysTime );
char buf[80];
for (int i = 0; i < 100000; i++)
{

    sprintf(buf, "%4d-%02d-%02d %02d:%02d:%02d",
        sysTime.wYear, sysTime.wMonth, sysTime.wDay, 
        sysTime.wHour, sysTime.wMinute, sysTime.wSecond);

}

Hinweis: Der OP erklärt in den Kommentaren, dass dies eine abgespeckte Beispiel. Die "echte" Schleife enthält zusätzlichen code, der verwendet unterschiedliche Zeit-Werten aus einer Datenbank. Profiling hat nicht aufgezeigt sprintf() als der Täter.

  • Wie lange ist eine "längere Zeit"? Ich würde erwarten, dass es in Mikrosekunden statt Millisekunden (je nach CPU)
  • Sie wären besser dran, einen Weg zu finden, rufen sprintf weniger Häufig statt.
InformationsquelleAutor Corey Trager | 2008-11-07
Schreibe einen Kommentar