2

memory_get_peak_usage()メソッドをチェックしようとして、forループ内にオブジェクトを動的に作成しようとし、phpスクリプトで使用されているメモリを出力しようとしました。ここにコードがあります:-

$objArr = array();
for( $i=1; $i<=100; $i++ ){
 echo "creating employee == " . memory_get_peak_usage()/1024 . " Kbs\n";
 $objArr[$i] = new CEmployee();
}
exit;

そして、これが私を混乱させた結果です:-

creating employee == 4156.84375 Kbs
creating employee == 6619.640625 Kbs
creating employee == 6619.640625 Kbs
creating employee == 6619.640625 Kbs
...
...(up to 40 lines from 2nd line same result as above and then from 41 line changed)

creating employee == 6623.5546875 Kbs
creating employee == 6631.234375 Kbs
creating employee == 6638.9140625 Kbs
creating employee == 6646.59375 Kbs
creating employee == 6654.2734375 Kbs
creating employee == 6661.953125 Kbs
creating employee == 6669.6328125 Kbs
creating employee == 6677.3125 Kbs
creating employee == 6684.9921875 Kbs
....
....

phpがオブジェクトにメモリを割り当てる方法がわかりません。Windows7のコマンドラインインターフェイスでスクリプトを実行しています

更新されたコード:-

gc_collect_cycles();
for( $i=1; $i<=100; $i++ ){
echo "creating employee == " . memory_get_usage()/1024 . " Kbs\n";
$objArr[$i] = new CEmployee();
    $objArr[$i]->setEmployeeNumber($i);
}exit;
4

1 に答える 1

2

これでわかるように、メモリ使用量が増加します。

http://codepad.org/RApsrlXh

ただし、ガベージ コレクションの準備ができているデータがある可能性があるため、新しいCEmployeeものを作成すると、そのスペースが使用される可能性があります。

より正確な読み取り値を得るためgc_collect_cycles()に、ループの前に実行して使用してみてください。memory_get_usage()

于 2012-08-30T08:09:50.650 に答える