tp3 循环使用数组添加操作add方法导致内存不断增加

发布于 2022-09-07 08:33:46 字数 769 浏览 10 评论 0

    G('begin');
    $model = M('test_data');
    $list = M('test_ids')->getField('id',true);
    foreach ($list as $k => $v) {
        $data = [];
        $data['params'] = $this->params;
        $temp_arr = $this->post($this->url,$data);

        $json_data = json_encode($temp_arr);
        $a_data = [];
        $a_data['json_data'] = $json_data;
        $model->add($a_data);
        unset($a_data);
        G('end');
        echo G('begin','end','m').'kb'.'<br>';

    }
    
    
    代码运行结果:
 
    

图片描述

当我把$model->add()注释掉的时候,结果如下
图片描述

请问为什么tp3的add方法会导致内存不断增加?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

十级心震 2022-09-14 08:33:47

这种情况还是换成SQL语句,直接插入吧。循环中应该尽量避免SQL操作。

删除会话 2022-09-14 08:33:47

底层的trace和日志导致的,关闭debug,修改一下trace配置。
入口文件添加:

define('APP_DEBUG', false);

https://www.kancloud.cn/manua...
有三种情况下,trace方法会记录日志:

  1. AJAX请求
  2. SHOW_PAGE_TRACE为false,也就是页面Trace关闭的情况下
  3. trace方法的第四个参数为true

因此如下配置,可以避免trace记录日志:

C('DB_DEBUG', false); // 关闭SQL调试  
C('TRACE_MAX_RECORD', 0);  
C('SHOW_PAGE_TRACE', true); // 配合TRACE_MAX_RECORD使用,避免记录日志
挖个坑埋了你 2022-09-14 08:33:46

循环里面的十几次数据库插入操作消耗的啊,还是用批量插入吧

恰似旧人归 2022-09-14 08:33:46

将model放入到foreach的遍历里面,然后unset实例化的model

G('begin');
    
    $list = M('test_ids')->getField('id',true);
    foreach ($list as $k => $v) {
        $model = M('test_data');
        $data = [];
        $data['params'] = $this->params;
        $temp_arr = $this->post($this->url,$data);

        $json_data = json_encode($temp_arr);
        $a_data = [];
        $a_data['json_data'] = $json_data;
        $model->add($a_data);
        unset($a_data);
        G('end');
        echo G('begin','end','m').'kb'.'<br>';
        unset($model);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文