【发布时间】:2017-08-15 02:04:48
【问题描述】:
我有一些关于在 PHP 上使用 foreach 的内存问题。 有一个进程使用了这么多内存。该过程只是从 WebService 中获取数据并插入到数据库中。但是数据很大,几乎有上千条数据。它真的很饿,几乎要吃掉 2g 的 ram。 反正有优化我的代码吗?我试过 unset() 和 = NULL 但没有释放内存。 这是我的代码,我正在使用 codeigniter:
$proxy = $this->proxy;
$token = $this->token;
$table = 'nilai';
$qk =$this->db->query("SELECT id_reg_pd from $databaseakm");
$tampan = $qk->result();
foreach($tampan as $keyz0 => $data0){
$id_reg_pd = $data0->id_reg_pd;
$filter3 = "p.id_reg_pd='$id_reg_pd'";
$order3= "";
$limit3 = 500;
$offset3 = 0;
$tampan3 = $proxy->GetRecordset($token, $table, $filter3, $order3, $limit3, $offset3);
$_datas = array_chunk($tampan3["result"], 50);
foreach($_datas as $key => $data)
{
$this->db->trans_start();
$this->db->query("UPDATE temp_tabel SET status_isi = 2 WHERE nama_tabel = '$databasenilai'");
$this->db->insert_batch($databasenilai, $data);
$this->db->trans_complete();
$tampan3 = NULL;
$data = NULL;
unset($tampan3);
unset($data);
}
$tampan3 = NULL;
$data = NULL;
unset($tampan3);
unset($data);
}
$tampan3 = NULL;
$data = NULL;
unset($tampan3);
unset($data);
【问题讨论】:
-
删除
unsets,在这种情况下他们将无济于事 -
好的,我会这样做的
-
您可以创建一个主脚本,使用
offset作为参数多次调用子脚本,而子脚本在主查询中使用offset:SELECT id_reg_pd from $databaseakm LIMIT $offset, 100跨度> -
数百?这没什么。
-
@ConstantinGALBENU 好的,我要试试。
标签: php codeigniter-3