Apakah yang perlu saya lakukan jika symfony propel doselect memori melimpah?
漂亮男人
漂亮男人 2017-05-16 16:46:11
0
1
428

Apakah yang perlu saya lakukan jika memori melimpah disebabkan terlalu banyak data yang dikeluarkan pada satu-satu masa apabila menggunakan symfony propel doselect?

漂亮男人
漂亮男人

membalas semua(1)
我想大声告诉你

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); // <= 预处理
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
}

Terdapat juga beberapa kaedah malas yang tidak menyembuhkan simptom:

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

/* 方法3:在php.ini里增大PHP运行内存限制 */
memory_limit = 1111M
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan