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.

文章来源:刘俊涛的博客


若有帮助到您,欢迎点赞、转发、支持,您的支持是对我坚持最好的肯定(_)

posted @ 2023-12-28 13:41  刘俊涛的博客  阅读(5)  评论(0编辑  收藏  举报