8

私は興味深いパフォーマンスの難問に遭遇しましたが、glibcを掘り下げてバグを左右中央に入力する前に、そこにあるかもしれない洞察を得たいと思っていました。

関数の1つでこれを行うコードがあります:

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%向上します。

誰かがこれに遭遇しましたか?このOSは特定ですか?

4

1 に答える 1

6

POSIXはstrftime呼び出す必要がありますtzset()(または呼び出したように動作します)。これは、Linuxシステムでは/ etc / timezoneやその他のファイルを統計する可能性が高く、(snprintfと比較して)低速です。環境変数を設定するTZと、通常、大きな後押しが得られます。

コメントで述べたように、それはまたメッセージをローカライズします。

于 2011-11-17T21:42:24.347 に答える