为什么迭代超过10,000次的foreach循环会耗尽内存?

时间:2011-12-10 12:28:05

标签: php out-of-memory

我正在开发一个循环/迭代超过10,000次的PHP脚本:

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 个答案:

答案 0 :(得分:8)

您将实例化为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

答案 1 :(得分:5)

在循环结束时尝试unset($obk_car)

答案 2 :(得分:2)

unset foreach循环

末尾的对象
unset($obj_car);

如果您的脚本仍需要更多内存,可以在此行php.ini增加limit

memory_limit = 128M

修改:

  • 如果您使用的是PHP> = 5.3.0,则可以通过调用gc_collect_cycles
  • 强制执行垃圾收集
  • 如果您使用的是PHP> = 5.2,那么来自IBM的this article是一个有趣的读物。