我正在查看一些函数的执行时间,但我发现microtime出错了,只有一个microtime()
实施№1总是第一次总是得到更多然后第二次microtime()
执行,当我测试一个函数并看到一个案例比另一个案件更快,但在替换之后(< em>第二个功能到第一个地方),无论如何它变得越来越慢,即使速度提高了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()
之前作为静态数据存储,但在这种情况下执行的时间总是第二次比第一次慢( oposite to implementation №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..
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());
答案 0 :(得分:2)
到目前为止,我看到实施№1是正确的。不知道你在第二次实现中尝试了什么。
这里的建议 - 永远不要在同一个脚本中测试两个案例。单独运行几次,然后找到平均时间。 PHP在需要时分配内存,这是一个缓慢的操作。第二种情况可能会重复使用已分配的内存并跳过此操作,结果会出错。
答案 1 :(得分:0)
static使一个变量半全局在该函数中保留为函数名。
我想说延迟是因为需要检查静态数组的静态变量的先前值。
额外工作==延迟