一部の関数の実行時間を調べていましたが、マイクロタイムが間違っていることがわかりました。microtime()
実装№1microtime()
は常に、ある関数をテストし、あるケースが別のケースよりも速いことがわかったときに、最初は常に2回目の実行よりも多くなっていますが、場所を置き換えた後( 2番目の関数を1番目の場所に)、とにかく遅くなりました。 3倍速…
function dotimes($times,$eval,$data=false) {for(;--$times;) eval($eval);}
$start = microtime(true);
dotimes(1000,'$i = $i?$times/2:1;');
printf(": executed : %f\n",microtime(true)-$start);
$start = microtime(true);
dotimes(1000,'$i = $i?$times/2:1;');
printf(": executed : %f\n",microtime(true)-$start);
// 1st case is always slower...
実装№2 ivはmicrotime()
静的データストレージとして前に時々作成されましたが、その場合、実行時間は常に2回目は最初よりも遅くなります(実装№1の反対)
function get_execution_time()
{
static $microtime_start = null;
return $microtime_start === null ? $microtime_start = microtime(true) : microtime(true) - $microtime_start;
}
function dotimes($times,$eval,$data=false) {for(;--$times;) eval($eval);}
get_execution_time();
dotimes(1000,'$i = $i?$times/2:1;');
printf(": executed : %f\n<br>",get_execution_time());
get_execution_time();
dotimes(1000,'$i = $i?$times/2:1;');
printf(": executed : %f\n<br>",get_execution_time());
//now 2nd case is faster..
- 何が起こっているのか誰か教えてもらえますか?なぜこれらのマイクロタイムが1つのケースで常に遅くなり、静的ストレージを介して2番目の実行が遅くなるのか、なぜですか?
psここに小さなmt関数が必要な場合は、私の修正済みで正しく機能しています:
function get_mt() {static $mt; return $mt ? microtime(true)-$mt.$mt=null : $mt=microtime(true);}
添付 :
function get_mt() {static $mt; return $mt?microtime(true)-$mt:$mt=microtime(true);}
function dotimes($times,$eval,$data=false) {for(;--$times;) eval($eval);}
$start = microtime(true);
get_mt();
dotimes(10000,'$i = $i?$times/2:1;');
printf(":clean executed : %f\n<br>",microtime(true)-$start);
printf(":static executed : %f\n<br>",get_mt());
$start = microtime(true);
get_mt();
dotimes(10000,'$i = $i?$times/2:1;');
printf(":clean executed : %f\n<br>",microtime(true)-$start);
printf(":static executed : %f\n<br>",get_mt());