2013-03-15 82 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