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

标签 php performance benchmarking

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

http://snipplr.com/view/759/

$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/

相关文章:

c - 给定数据类型的算术运算成本是否随操作数值而变化?

sql-server - SQL Server如何在不影响性能的情况下将链接服务器添加到同一实例

php - 在 PHP 中 $this-> 之后使用美元符号是什么意思?

javascript - 当键与另一个数组匹配时更新关联数组中的值

php - 如何使用 ajax post 和 url 的放大弹出窗口?

javascript - 显然 JSON.parse 比声明对象字面量更快。如果是这样的话,为什么我的结果显示不一样?

objective-c - 计时 Objective-C 代码

benchmarking - 无法破译 Autobench 输出

javascript - 为什么node.js比apache 2.4慢这么多

php - 在 WooCommerce 中的价格前后添加文本(不包括订阅产品)