我遇到了一个有趣的性能难题但是在我开始深入研究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%。
有没有人碰到这个?这个操作系统是否具体?
答案 0 :(得分:6)
POSIX需要strftime
来调用tzset()
(或者就像它一样),这在linux系统上很可能是stat / etc / timezone和其他文件,这很慢(与snprintf相比) 。设置TZ
环境变量通常会给它带来很大的推动力。
正如评论中所述,它也将信息本地化。