Как я могу улучшить / заменить sprintf, который, по моим оценкам, является горячей точкой производительности? - PullRequest
8 голосов
/ 07 ноября 2008

Благодаря профилированию я обнаружил, что спринт здесь занимает много времени. Есть ли более эффективная альтернатива, которая по-прежнему обрабатывает ведущие нули в полях y / m / d h / m / s?

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);

}

Примечание. ФП поясняет в комментариях, что это упрощенный пример. «Реальный» цикл содержит дополнительный код, который использует различные значения времени из базы данных. Профилирование определило sprintf() как нарушителя.

Ответы [ 12 ]

0 голосов
/ 07 ноября 2008

Трудно представить, что вы собираетесь выиграть у sprintf при форматировании целых чисел. Вы уверены, что sprintf это ваша проблема?

0 голосов
/ 07 ноября 2008

StringStream - это предложение от Google.

http://bytes.com/forum/thread132583.html

...