Я исследую производительность журналирования в системе Unix. Дело в том, что я обнаружил, что самой дорогой операцией является получение даты.
В настоящее время я получаю время, как это —
timeb currTime;
struct tm localTime;
ftime( &currTime )
localtime_r(&currTime.time, &localTime);
Я изменил это на
struct timeval tv;
gettimeofday(&tv, NULL);
time_t curtime = tv.tv_sec;
struct tm localTime = *(localtime(&curtime));
и не увидел улучшения производительности. Поэтому мне интересно, может быть, это не самый быстрый способ получить местное время в системах Unix?
Пожалуйста, поделитесь своими мыслями об этом.
Спасибо заранее.
gettimeofday дает вам время UTC очень быстро. Преобразование в местное время не так быстро.
Отложите преобразование этого значения в местное время, пока не выйдете из критического для производительности пути.
Кроме того, вы можете кэшировать UTC в коэффициент преобразования местного времени один раз в день, чтобы ускорить преобразование в местное время, хотя это не идеально, вероятно, этого достаточно для ведения журналов.
Других решений пока нет …