[英]strftime performance vs. snprintf
我遇到了一個有趣的性能難題,但是在我開始研究glibc並從左到右輸入錯誤之前,我只是想獲得任何可能的見解。
我在其中一個函數中執行以下操作的代碼:
gettimeofday( &tv, 0);
localtime_r( &tv.tv_sec, &local_tm );
char result[25];
strftime( result, 24, "%Y-%m-%d %H:%M:%S", &local_tm);
其余代碼與該問題無關。 當我用這個替換它時:
gettimeofday( &tv, 0);
localtime_r( &tv.tv_sec, &local_tm );
char result[25];
snprintf(result, sizeof(result), "%04d-%02d-%02d %02d:%02d:%02d",
local_tm.tm_year+1900, local_tm.tm_mon+1,
local_tm.tm_mday, local_tm.tm_hour, local_tm.tm_min,
local_tm.tm_sec);
平均而言,我可以獲得20%的性能提升。
有人遇到過這個嗎? 這個操作系統是特定的嗎?
POSIX要求strftime
調用tzset()
(或像執行該操作一樣),在Linux系統上它可能會統計/ etc / timezone和其他文件,這很慢(與snprintf相比)。 設置TZ
環境變量通常會大大提高它。
如評論中所說,它還可以對消息進行本地化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.