2013-03-15 53 views
0

所以我有一个包含3500个元素的数据库表。当我试图显示这个数据,我得到这个消息:Symfony2的最大数据大小

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 77 bytes) in C:\Program Files\EasyPHP-5.3.8.0\www\Symfony\vendor\doctrine\lib\Doctrine\ORM\Mapping\ClassMetadata.php on line 344

回答

1

我认为你正在寻找一个Iterator。
This article会告诉你如何处理大数据。

$q = $this->_em->createQuery("<DQL to select the objects I want>"); 
$iterableResult = $q->iterate(); 
while (($row = $iterableResult->next()) !== false) { 
     // do stuff with the data in the row, $row[0] is always the object 
     $this->_em->detach($row[0]); // detach from Doctrine, so that it can be GC'd immediately 
} 

此代码,而不是装载在单个阵列中的所有DATAS,创建一个迭代器,以防止大的负荷和这样那样的错误。

不过,如果你只是希望就如何增加PHP的内存大小看看this answer

ini_set('memory_limit', '1G'); 
0

谷歌为“分页” :)通常从未有一个理由,一次撷取每一个实体,因为(举例来说)谁愿意等待阅读一个单页上3500个条目的巨大列表?如果您真的需要它们(例如,进一步处理),请按块读取并处理它们。

BTW:这不是故障的S2s,该内存是有限的:)

+0

其实我使用的,一次显示线条的一种高精度数的jQuery插件数据表使用分页。那么什么内存是有限的?以及如何扩展它(如果可能的话)? – 2013-03-15 08:39:29

+0

Jquery无法访问数据库本身,因此您可能能够在后端执行此类优化,是吗? ;) – KingCrunch 2013-03-15 08:50:46