私は誰かのために何百万もの古いログエントリでデータマイニングを行っています.この問題でPHPを使用して、資料を既存のPHPシステムに簡単にリンクできるようにしたいと思っています.
ターミナル (OSX 10.8) の PHP 5.4.4 でこのコードを実行します。
// Settings
ini_set('error_reporting', E_ALL); // Shows all feedback from the parser for debugging
ini_set('max_execution_time', 0); // Changes the 30 seconds parser exit to infinite
ini_set('memory_limit', '512M'); // Sets the memory that may be used to 512MegaBytes
echo 'Start memory usage: '.(memory_get_usage(TRUE) / 1024)."\n";
$x = Array();
for ($i = 0; $i < 1e7; $i++) {
$x[$i] = 1 * rand(0, 10);
//unset($x[$i]);
}
echo 'End memory usage: '.(memory_get_usage(TRUE) / 1024)."\n";
echo 'Peak memory usage: '.(memory_get_peak_usage(TRUE) / 1024)."\n";
これは、1,000 万サイクルの単純なテストです。Pythonで辞書を使用する場合と比較して、漏れは本当に悪いです:(。
使用法をテストするために unset() 関数の引用符を外すと、すぐにすべてがユニコーンとレインボーになります。したがって、メモリの解放を強制するとうまくいくようです。
その 512M メモリ制限内で 1000 万から 5000 万の配列エントリを維持できる方法はありますか?
この種のループで正規表現をいつ実行するか想像できません..