Почему циклу foreach, который повторяется более 10 000 раз, не хватает памяти? - PullRequest
6 голосов
/ 10 декабря 2011

Я разрабатываю скрипт PHP, который повторяет / повторяет более 10000 раз:

foreach ($array_with_items as $item) {

    // Instantiate the object
    $obj_car = new CarAds($puk, 'ENG', '5');

    $obj_car->detail1 = "Info about detail1";
    $obj_car->detail2 = "Info about detail2";
    $obj_car->detail3 = "Info about detail3";
    $obj_car->detail4 = "Info about detail4";

    // Saves to the database
    $obk_car->save;
}

Когда я запускаю этот код, моей машине не хватает памяти. Что я могу сделать, чтобы очистить память в этом цикле foreach?

Ответы [ 3 ]

9 голосов
/ 10 декабря 2011

Вы создаете экземпляры в виде объектов CarAds в качестве количества элементов $ array_with_items.Каждый из них выделяет память.

После метода save () вы должны освободить объект с помощью функции unset ():

// Saves to the database
$obj_car->save;

// Unset unneeded object
unset($obj_car);

Вы можете проверить потребление памяти с помощью memory_get_usage () (см http://php.net/manual/en/function.memory-get-usage.php)

5 голосов
/ 10 декабря 2011

Попробуйте unset($obk_car) в конце цикла.

2 голосов
/ 10 декабря 2011

unset объект в конце цикла foreach

unset($obj_car);

Если вам все еще нужно больше памяти для сценария, вы можете увеличить предел в вашем php.ini в этой строке:

memory_limit = 128M

Редактировать:

  • Если вы используете PHP> = 5.3.0, вы можете принудительно собрать сборку мусора, позвонив по номеру gc_collect_cycles
  • Если вы используете PHP> = 5.2, , эта статья от IBM - интересное чтение.
...