簡體   English   中英

strftime性能與snprintf

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM