symfony propel doselect 記憶體溢位怎麼辦?
漂亮男人
漂亮男人 2017-05-16 16:46:11
0
1
451

symfony propel doselect時,因為一次拿出的資料太大,導致記憶體溢出怎麼辦?

漂亮男人
漂亮男人

全部回覆(1)
我想大声告诉你

用doSelect,會把所有行一次取出來丟到記憶體裡,如果你的結果集比較大,自然會炸;你可以用逐行操作來控制記憶體峰值:

/* 方法1.a */
$stmt = YourPeer::doSelectStmt($criteria); // <= 预处理
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // 逐行操作$row
}

/* 方法1.b */
$rs = YourPeer::doSelectRS($criteria); // <= 取回一个打了包装的结果集
$rs->setFetchMode(ResultSet::FETCHMODE_ASSOC);
while($rs->next()) {
    $row = $rs->getRow();
    // 逐行操作$row
}

還有一些不治標的偷懶辦法:

/* 方法2:如果不需要把数据结果映射成对象,可以只获取指定的字段;不映射成对象,也能省内存 */
$criteria = new Criteria();
$criteria->clearSelectColumns()->addSelectColumn(YourPeer::COL_NAME);
// 然后⋯⋯

/* 方法3:在php.ini里增大PHP运行内存限制 */
memory_limit = 1111M
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板