cari

Rumah  >  Soal Jawab  >  teks badan

Apakah yang perlu saya lakukan jika symfony propel doselect memori melimpah?

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

漂亮男人漂亮男人2789 hari yang lalu457

membalas semua(1)saya akan balas

  • 我想大声告诉你

    我想大声告诉你2017-05-16 16:48:11

    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

    balas
    0
  • Batalbalas