フォルダには、34,000の構成ファイルがあります。各ファイルには、固有の構成仕様を持つオブジェクトが含まれています。ファイルの内容の例を次に示します。
$obj = new obj();
$obj->name = "name":
$obj->location "nyc";
...
...
etc
各ファイルの長さは約100〜200行で、サイズは約17kです。
これらをデータベースに取り込むために、次の関数があります。
function retrieve_files(){
$objs = array();
$path = 'filefolder';
//retrieve a list of files as an array of objects
$files = get_files('/\.inc$/', $path, 'filename', 0);
foreach ($files as $file) {
include_once $path.'/'.$file->filename;
$objs[$obj->name] = $obj;
}
return $objs;
}
オブジェクト配列が返されると、それは別の関数でループされ、シリアル化され、それぞれがデータベースに保存されます。
現在、私のサーバーは8ギガヘルツのRAMを搭載したIntelデュアルコア3.06Ghzプロセッサです。Ubuntu12.04のコマンドラインからスクリプトを実行しています。
スクリプトが処理するにつれて、CPUは100%で最大になり、8つのギグがすべて最大になるまでメモリが増加します。その後、スクリプトがクラッシュします。
このスクリプト、または全体的な処理をより効率的にするにはどうすればよいですか?できれば、この機能の範囲内にとどまりたいと思います。また、これを1回のパスで実行したいと思います。アレイが作成され、ループが繰り返されるときに、より少ないリソースを使用するか、リソースを解放するこれをリファクタリングする方法はありますか?