如何緩存結果?這不是一種可能嗎?考慮到這個特殊的sprintf()調用在你的代碼中過於頻繁,我假設在大多數連續調用之間,年,月和日不會改變。
因此,我們可以實現類似下面的內容。聲明一老一電流SYSTEMTIME結構:
SYSTEMTIME sysTime, oldSysTime;
此外,申報獨立的部分來保存日期和時間:
char datePart[80];
char timePart[80];
爲,第一時間,你必須填寫這兩個sysTime,oldSysTime以及datePart和timePart。但後續sprintf()可以做得相當快,如下所示:
sprintf (timePart, "%02d:%02d:%02d", sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
if (oldSysTime.wYear == sysTime.wYear &&
oldSysTime.wMonth == sysTime.wMonth &&
oldSysTime.wDay == sysTime.wDay)
{
// we can reuse the date part
strcpy (buff, datePart);
strcat (buff, timePart);
}
else {
// we need to regenerate the date part as well
sprintf (datePart, "%4d-%02d-%02d", sysTime.wYear, sysTime.wMonth, sysTime.wDay);
strcpy (buff, datePart);
strcat (buff, timePart);
}
memcpy (&oldSysTime, &sysTime, sizeof (SYSTEMTIME));
上面的代碼有一些冗餘,使代碼更容易理解。你可以輕鬆分解。如果你知道即使是小時和分鐘也不會比你對例程的調用更快,你可以進一步加速。
「很長時間「?我期望它是微秒而不是毫秒(取決於CPU) – Roddy 2008-11-07 13:19:44
你最好找一種方式來調用sprintf,而不是頻繁地調用。 – Brian 2008-11-07 13:36:26