symfony2命令数据内存限制太多

时间:2013-03-05 09:16:55

标签: php memory symfony doctrine-orm

我已经创建了一个命令来为我的应用程序创建事件。该命令创建了超过700个事件,一切都很好。

但每个活动应该有超过250位客人。这意味着,我必须在一个php进程中插入超过175000个访客。

我已经阅读了很多有关批量处理和性能优化的内容,以便完成这项工作。

但是,客户创造需要太多的记忆,创造需要花费很多时间。 我测试的没有任何改变改善了性能。

有人知道如何创建我的数据吗?

以下是代码:

// create Events
.
.
.
$events = array(); //List of Events load from the database
$amountG = 250;
$countGuests = 0;
foreach($events as $event){

    for($i=0;$i<$amountG;$i++){                

        $guest = null;
        $guest = $this->createGuest($event); //creates a guest object with random testdata                
        $countGuests++;
        $guest->setPublickey(PublickeyUtils::generatePublickey($countGuests));
        $em->persist($guest);
        if($countGuests%5000 == 0){            
            $em->flush();            
            $em->clear();            
            gc_collect_cycles();
        }

        $glEntry = null;
        unset($glEntry);
    }               
    $event = null;
    unset($event);
}

$em->flush();            
$em->clear();            

每次刷新需要3%的内存,这意味着,因为达到了内存限制,所有175.000个条目都不会被刷新。

每5000个条目需要超过10秒。 增加冲洗量会让我更慢。

我还做的是使用选项--env=prod and -no-debug调用脚本以防止记录。

使其更有效地运作的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

根据您目前设置的内容,您还可以考虑增加php的memory limit

答案 1 :(得分:0)

解决方案是在没有任何对象的情况下进行插入:

$em->getConnection()->insert('entity', $array);