大量のデータを処理するユーティリティをプログラムしようとしていますが、メモリが要因です。残念ながら、私が実行するこのループのセットを実行するたびに、apxを消費します。unset()呼び出しを使用しても、何千回も実行されるため、14MBのメモリが使用されます(もちろん、メモリが完全にクリーンアップされないことは承知しています。質問をしている理由の1つです)。これを行うもっと簡単な方法があるかどうか疑問に思います。現在動作しているコード:
$qr = array();
foreach($XML->row as $row)
{
$ra = array();
foreach($row as $key => $value)
{
$ra[$key] = $value[0];
unset($key,$value);
}
$qr[] = $ra;
unset($row,$ra);
}
unset($XML);
return $qr;
別の試みはこれを行うことでしたが、遅れています。誰かが私が間違っていることを知っていますか?
$qr = array();
while(list(,$row) = each($XML->row))
{
$ra = array();
while(list($key,$value) = each($row))
{
$ra[$key] = $value[0];
unset($key,$value);
}
$qr[] = $ra;
unset($row,$ra);
}
unset($XML);
return $qr;
基本的に最初のループでは、基本的な配列/オブジェクトの反復を実行しようとしています。2番目のループでは、オブジェクトと配列のインデックスの関連付けを維持しながら、各配列値を調べて1番目の要素を取得しようとしています。動作したのはそれだけだったので(SimpleXMLオブジェクトをループしているため)、もともとはこのように書いたようです。このことをスピードアップしたり、記憶を食べないようにする方法を考え出すためのヒントをいただければ幸いです。
ガベージコレクションまたはより効率的なコードのソリューションを探しています。SimpleXMLは必要ないので、置き換える予定はありません。 より明確に、私は探しています:
- 内部ループを呼び出す必要なしにSimpleXMLオブジェクトを反復する方法(これは私が$ value [0]を実行したためだけです。なぜそれが必要なのですか?
- データを反復処理するためのより効率的な方法(速度またはメモリのいずれか)