Почему другой тестовый заказ получит другой результат? - PullRequest
4 голосов
/ 19 июля 2011

Я изменил порядок тестирования и получил другой результат.Я попытался отключить кэш кода операции, добавил unset, но все равно получил другой результат.Почему?

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);

Потребовалось 0,145872 секунды для массива [] Потребовалось 0,154502 секунды для array_push

$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);

Потребовалось 0,197076 секунд для array_push Потребовалось 0,122565 секунды дляarray []

Увеличить тестовый номер до 500000:

Взял 0,779719 секунд для массива [] Взял 0,757806 секунд для array_push

Взял 1,008018 секунд для array_push Взял 0,494230 секунд для массива []

Проверьте, изменил ли я порядок тестирования.разница в скорости в 2 раза.

1 Ответ

2 голосов
/ 19 июля 2011

моя мысль об использовании памяти: я добавил эхо разницы 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[] после array_push() не нужно тратить на это время, но array_push() после array[] делает.

или, может быть,это бред

пс: так, чтобы повысить производительность, нужно вызвать функцию, которая потребляет много памяти и не очищает в начале скрипта ?!% |

...