是否值得保留struct tm
的本地副本并仅在需要时更新它;下面的func不是线程安全的......我也看到只有6到7%的CPU时间可以保存...
struct tm* custom_localtime (time_t now_sec)
{
static time_t cache_sec;
static struct tm tms;
if (now_sec != cache_sec) {
cache_sec = now_sec;
localtime_r(&cache_sec, &(tms));
}
return(&tms);
}
其他细节:
- 我的应用对localtime_r()
当我将格式为"2011-12-09 10:32:45"
的时间戳字符串再次time_t
秒
答案 0 :(得分:1)
“避免不需要的库函数调用”是值得的。剩下的只是你在记忆和速度之间的权衡。
由于你正在调用这个3000 /秒,你可能想要更进一步,将此函数作为static inline
放在标题中,并且(如果使用GCC)使用条件的分支预测提示,说明服用它“不太可能”:
if (__builtin_expect(now_sec != cache_sec, 0))
答案 1 :(得分:1)
我可能已经在你的问题中提到了3000 / s的通话费率!做吧。我最近正在分析一个屏幕的生成情况,该屏幕称本地时间约为1,000,000 * 10,000次。
嵌套循环可以通过一些思考得到大幅改进,但我看到的是大约85%的CPU时间被本地时间使用。简单地缓存结果,因此它仅被调用了10,000次,减少了85%的页面生成时间,这使得它足够快速。