Symfony2命令数据内存限制过多


symfony2 command too much data memory limit

我创建了一个命令来为我的应用程序创建事件。该命令创建了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调用脚本以防止日志记录。

让它更高效地工作的最好方法是什么?

根据当前的设置,您还可以考虑增加php的内存限制

不带任何对象的插入方案列表:

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