Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么不同的测试顺序会得到不同的结果?_Php_Performance_Benchmarking - Fatal编程技术网

Php 为什么不同的测试顺序会得到不同的结果?

Php 为什么不同的测试顺序会得到不同的结果?,php,performance,benchmarking,Php,Performance,Benchmarking,我改变了测试顺序,得到了不同的结果。我尝试禁用操作码缓存,添加了unset,但仍然得到不同的结果。为什么? $time\u start=microtime(真); $myArray=array(); 对于($i=0;$i

我改变了测试顺序,得到了不同的结果。我尝试禁用操作码缓存,添加了unset,但仍然得到不同的结果。为什么?

$time\u start=microtime(真);
$myArray=array();
对于($i=0;$i<100000;++$i)
{
$myArray[]=$i;
$myArray[]=“测试字符串”;
}
$time\U end=微时间(真);
printf(“数组[]\n用了%f秒,$time\u end-$time\u start”);
$time\U start=微时间(真);
$myArray=array();
对于($i=0;$i<100000;++$i)
{
数组推送($myArray,$i);
array_push($myArray,'testa string');
}
$time\U end=微时间(真);
printf(“阵列\u推送\n花费了%f秒,$time\u end-$time\u start”);
阵列[]用时0.145872秒,阵列_推送用时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);
$time\u start=microtime(真);
$myArray=array();
对于($i=0;$i<100000;++$i)
{
数组推送($myArray,$i);
array_push($myArray,'testa string');
}
$time\U end=微时间(真);
printf(“阵列\u推送\n花费了%f秒,$time\u end-$time\u start”);
$time\U start=微时间(真);
$myArray=array();
对于($i=0;$i<100000;++$i)
{
$myArray[]=$i;
$myArray[]=“测试字符串”;
}
$time\U end=微时间(真);
printf(“数组[]\n用了%f秒,$time\u end-$time\u start”);
阵列的推送时间为0.197076秒,阵列的推送时间为0.122565秒[]

将测试数量增加到500000:

阵列[]的时间为0.779719秒,阵列推送的时间为0.757806秒

$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);
阵列的推送时间为1.008018秒,阵列的推送时间为0.494230秒[]


看看我是否改变了测试顺序。这是2倍的速度差。

我的想法是关于内存使用:我添加了
内存使用差异的回声()
(就像时间一样),并看到了以下内容:

Took 0.108744 seconds for array_push
memory: 32497848
Took 0.151069 seconds for array_push
memory: 320

因此:
array\u push()
似乎没有清理为脚本分配的内存,而
array[]
似乎正在清理。php需要一些时间来分配新内存(我猜),所以
array[]
after
array\u push()
不需要在上面花费时间,但是
array\u push()
after
array[]
需要

或者,可能是精神错乱


ps:所以,为了提高性能,必须调用一个消耗大量内存且在脚本开始时无法清理的函数?!%|

尝试使用array[]和array[]并使用array_push x2进行第二次测试,以删除“array_push vs.[]”方面,我们将了解将发生什么
Took 0.061715 seconds for array[]
memory: 32499584
Took 0.058831 seconds for array[]
memory: -40