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

    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方法会导致内存不断增加?

阅读 3.4k
4 个回答

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

将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);
    }

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

新手上路,请多包涵

底层的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使用,避免记录日志
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题