A través del perfilado, he descubierto que el sprintf aquí lleva mucho tiempo. ¿Hay una alternativa de mejor rendimiento que maneje los ceros a la izquierda en los campos y/m/d h/m/s?¿Cómo puedo mejorar/reemplazar el sprintf, que he medido para ser un hotspot de rendimiento?
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);
}
Nota: El PO explica en los comentarios que este es un ejemplo reducidos al mínimo. El bucle "real" contiene un código adicional que usa valores de tiempo variables de una base de datos. La creación de perfiles ha identificado sprintf()
como delincuente.
¿Cuánto dura "un largo tiempo? "¿?" Esperaría que fuera en microsegundos en lugar de milisegundos (dependiendo de la CPU) – Roddy
Será mejor que encuentre una manera de llamar al sprintf con menos frecuencia. – Brian