PHP內存佔用優化

請求次數:1300次
執行時間:200*60=12000S

// 要分批保存數據,可以將 `$all_data` 數組拆分成多個小數組,並逐一調用 `saveAll` 方法。以下是一個示例,演示如何將數據分批爲每批100條進行保存:

$dataModel = new cxVipUserStudyInfo();
$batchSize = 100;
$offset = 0;

foreach ($jsonData as &$value) {
    // ... 檢查參數和處理數據 ...

    $all_data[] = $value;
}

$totalDataCount = count($all_data);

for ($i = 0; $i < $totalDataCount; $i += $batchSize) {
    $batchData = array_slice($all_data, $i, $batchSize);
    
    try {
        $result = $dataModel->saveAll($batchData);
        unset($batchData);
    } catch (\Throwable $th) {
        mylog('請求失敗:', $th, 'saveStuStudyDataInfo_error', 'chaoxue');
        return $this->jsonCode($th, 1);
    }
}

在這個示例中:

  1. 設置一個 $batchSize 變量,表示每批數據的數量(這裏設置爲100)。
  2. 使用 for 循環遍歷 $all_data 數組,每次迭代的步長爲 $batchSize
  3. 在每次循環中,使用 array_slice 函數獲取當前批次的數據子集 $batchData
  4. 嘗試將 $batchData 中的數據保存到數據庫中。如果發生異常,捕獲並處理錯誤。
  5. 繼續下一次循環,直到處理完所有數據。

通過這種方式,可以控制每次保存的數據量,從而降低內存和數據庫資源的使用。

請注意,需要根據實際環境和需求調整 $batchSize 的值,以找到最佳的性能平衡點。



歡迎關注公-衆-號【TaonyDaily】、留言、評論,一起學習。

公衆號

Don’t reinvent the wheel, library code is there to help.

文章來源:劉俊濤的博客


若有幫助到您,歡迎點贊、轉發、支持,您的支持是對我堅持最好的肯定(_)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章