我更改了测试顺序并得到了不同的结果。我尝试禁用操作码缓存,添加未设置,但仍然得到不同的结果。为什么?
$time_start = microtime(true);
$myArray = array();
for ( $i = 0; $i < 100000; ++$i )
{
$myArray[] = $i;
$myArray[] = 'test a string';
}
$time_end = microtime(true);
printf("Took %f seconds for array[]\n", $time_end - $time_start);
$time_start = microtime(true);
$myArray = array();
for ( $i = 0; $i < 100000; ++$i )
{
array_push($myArray, $i);
array_push($myArray, 'test a string');
}
$time_end = microtime(true);
printf("Took %f seconds for array_push\n", $time_end - $time_start);
array[] 花费了 0.145872 秒 array_push 花费了 0.154502 秒
$time_start = microtime(true);
$myArray = array();
for ( $i = 0; $i < 100000; ++$i )
{
array_push($myArray, $i);
array_push($myArray, 'test a string');
}
$time_end = microtime(true);
printf("Took %f seconds for array_push\n", $time_end - $time_start);
$time_start = microtime(true);
$myArray = array();
for ( $i = 0; $i < 100000; ++$i )
{
$myArray[] = $i;
$myArray[] = 'test a string';
}
$time_end = microtime(true);
printf("Took %f seconds for array[]\n", $time_end - $time_start);
array_push 花费了 0.197076 秒 array[] 花费了 0.122565 秒
将测试数量增加到 500000:
array[] 花费了 0.779719 秒 array_push 花费了 0.757806 秒
array_push 花费了 1.008018 秒 array[] 花费了 0.494230 秒
看看我是否更改测试顺序。这是 2 倍的速度差异。
最佳答案
我的想法是关于内存使用:我添加了 memory_get_usage()
差异的回显(就像时间一样)并看到了这个:
Took 0.108744 seconds for array_push
memory: 32497848
Took 0.151069 seconds for array_push
memory: 320
和
Took 0.061715 seconds for array[]
memory: 32499584
Took 0.058831 seconds for array[]
memory: -40
所以:array_push()
似乎没有清理为脚本分配的内存,而 array[]
似乎这样做了。 php 需要一些时间来分配新内存(我猜),所以 array_push()
之后的 array[]
不需要花时间在上面,但是 array_push ()
在 array[]
之后。
或者,也许是精神错乱
ps:所以,为了提高性能,必须调用一个消耗大量内存并且在脚本开头不清理的函数?! %|
关于php - 为什么不同的测试顺序会得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6746929/