2017-03-22 18 views
0

PHPでforeachを使用しているメモリに関する問題があります。 あまりにも多くのメモリを使用するプロセスがあります。このプロセスは、WebServiceからデータを取り出し、データベースに挿入するだけです。しかし、データは膨大で、数千のデータがあります。それは本当に空腹で、2gigsのラムを食べます。 コードを最適化する方法はありますか? unset()とNULLを試しましたが、メモリを解放しません。PHPメモリ使用のためにforeachプロセスを最適化する方法は?

$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); 
+1

'unset'sを削除します。この場合は役に立ちません。 –

+0

Ok、私はそれを行うでしょう –

+0

あなたはパラメータとして 'offset'を使用して子スクリプトを複数回呼び出すマスタースクリプトを作成することができ、子スクリプトはメインクエリで' offset'を使用します: 'SELECT id_reg_pd from $ databaseakm LIMIT $ offset、100' –

答えて

0

戻りオブジェクトを、その代わりにそれぞれののwhileループを使用します。ここに私のコード 、私はCodeIgniterのを使用しています。それぞれがデータ全体をメモリにロードしてループしますが、ループは一度に1つずつ実行され、次のループを取得しようとします。

関連する問題