Que dois-je faire si la mémoire de Symfony Propel Doselect déborde ?
漂亮男人
漂亮男人 2017-05-16 16:46:11
0
1
425

Que dois-je faire si la mémoire déborde en raison d'un trop grand nombre de données supprimées en même temps lors de l'utilisation de symfony propel doselect ?

漂亮男人
漂亮男人

répondre à tous(1)
我想大声告诉你

L'utilisation de doSelect supprimera toutes les lignes à la fois et les placera dans la mémoire. Si votre ensemble de résultats est relativement volumineux, il explosera naturellement ; vous pouvez utiliser l'opération ligne par ligne pour contrôler le pic de mémoire :

/* 方法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
}

Il existe également des méthodes paresseuses qui ne guérissent pas les symptômes :

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

/* 方法3:在php.ini里增大PHP运行内存限制 */
memory_limit = 1111M
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal