Apakah yang perlu saya lakukan jika memori melimpah disebabkan terlalu banyak data yang dikeluarkan pada satu-satu masa apabila menggunakan symfony propel doselect?
Menggunakan doSelect akan mengeluarkan semua baris sekaligus dan membuangnya ke dalam memori Jika set hasil anda agak besar, ia secara semula jadi akan meletup; anda boleh menggunakan operasi baris demi baris untuk mengawal puncak memori:
/* 方法1.a */ $stmt = YourPeer::doSelectStmt($criteria); // <= 預(yù)處理 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // 逐行操作$row } /* 方法1.b */ $rs = YourPeer::doSelectRS($criteria); // <= 取回一個打了包裝的結(jié)果集 $rs->setFetchMode(ResultSet::FETCHMODE_ASSOC); while($rs->next()) { $row = $rs->getRow(); // 逐行操作$row }
Terdapat juga beberapa kaedah malas yang tidak menyembuhkan simptom:
/* 方法2:如果不需要把數(shù)據(jù)結(jié)果映射成對象,可以只獲取指定的字段;不映射成對象,也能省內(nèi)存 */ $criteria = new Criteria(); $criteria->clearSelectColumns()->addSelectColumn(YourPeer::COL_NAME); // 然后?? /* 方法3:在php.ini里增大PHP運行內(nèi)存限制 */ memory_limit = 1111M