我使用symfony 1.4和doctrine 1.2将对象批量插入数据库时出现问题.
我的模型有一种称为"扇区"的对象,每个对象都有几个"Cupo"类型的对象(通常范围从50到200000).这些物体非常小; 只是一个短标识符字符串和一个或两个整数.每当用户创建一组扇区时,我需要自动将所有这些"Cupo"实例添加到数据库中.如果出现任何问题,我正在使用一个学说交易来回滚所有内容.问题是我只能在php耗尽内存之前创建大约2000个实例.它目前有128MB的限制,应该足以处理使用少于100个字节的对象.我已经尝试将内存限制增加到512MB,但是php仍然崩溃,但这并没有解决问题.
这是错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /Users/yo/Sites/grifoo/lib/vendor/symfony/lib/log/sfVarLogger.class.php on line 170
Run Code Online (Sandbox Code Playgroud)
这是代码:
public function save($conn=null){
$conn=$conn?$conn:Doctrine_Manager::connection();
$conn->beginTransaction();
try {
$evento=$this->object;
foreach($evento->getSectores() as $s){
for($j=0;$j<$s->getCapacity();$j++){
$cupo=new Cupo();
$cupo->setActivo($s->getActivo());
$cupo->setEventoId($s->getEventoId());
$cupo->setNombre($j);
$cupo->setSector($s);
$cupo->save();
}
}
$conn->commit();
return;
}
catch (Exception $e) {
$conn->rollback();
throw $e;
}
Run Code Online (Sandbox Code Playgroud)
再一次,这个代码适用于少于1000个对象,但任何大于1500的代码都会失败.谢谢您的帮助.