2011-12-20 29 views
1

に奇妙な問題が発生しました。私は関数のメモリ使用量をチェックして使用します php:memory_get_usage(true)が増加しない

 
    class test { 
     public function __construct() { 
     $start = memory_get_usage(1); 
     runFunctionNeededToCheck(); 
     var_dump(memory_get_usage(1) - $start); 
     } 
    } 

しかし、この関数では何十個もの配列、オブジェクト、およびdbトランザクションを作成していますが、memの使用量は増加しません。 real_usageフラグがなければ、私は0より大きな評価を得ましたが、私はこのスクリプト/関数のメモリ使用量が必要です。

あなたにはいくつかのアイデアがありますか?あるいは、なぜ記憶が残っているように見えるのですか?

事前にTHX

編集

(...私は少しを試してみましたが、機能は問題ではありませんが、あなたは、オブジェクトの内部でこのコードを実行した場合、あなたが私の最後に来ているようです私が最初)

いやはや!すべてのローカルVARSは、関数の最後にクリアされ

効果 - でそれを言及しなかったことを残念に。どうも!

+0

私はこの問題は、関数が自分自身のスタックを持ち、機能が完了すると、このスタックがクリアされていること、だと思う - だから、メモリ使用量は同じでも前とほぼ同じになります。 –

+0

チップのThx。私はちょっと試してみましたが、関数は問題ではないようですが、オブジェクトの中でこのコードを実行すると、私の最後に来るでしょう... – Hazer666

+0

これはもっと役立つかもしれません:http://uk3.php.net/manual/ en/function.memory-get-peak-usage.php – jammypeach

答えて

0

は、私の知る限りでは、あなたが呼び出す関数は、var_dump()コマンドが呼び出された時点で、それ自体の後に片付けています。

問題にいくつかの光を当てることが関数自体、内部で同じラインを入れてみてください。もちろん

function runFunctionNeededToCheck() 
{ 
    $start = memory_get_usage(1); 

    //do something here....// 

    return (memory_get_usage(1) - $start); 
} 
$memUsage = runFunctionNeededToCheck(); 
echo $memUsage; 

、メモリ使用量の違いは、関数が何をするかに完全にそこに依存しているかどうか - あなたはuseageことを知っているので、それはより多くのメモリを使用していることを確認するために、イメージファイルか何かを開いてみてください以前よりも多くなるでしょう。

0

うーん、それが動作するように縫い目:

<?php 
class test { 

    public function __construct() { 
     $start = memory_get_usage(1); 
     range(1, 100000); 
     var_dump(array('start' => $start, 'end' => memory_get_usage(1), 'sub' => memory_get_usage(1) - $start)); 
    } 
} 

$v = new test(); 

結果:

array(3) { 
    ["start"]=> 
    int(786432) 
    ["end"]=> 
    int(1048576) 
    ["sub"]=> 
    int(262144) 
} 

Mabyあなたの関数は、任意の新しい変数を作成したり、最後にそれらをクリアしていませんか?

+0

ええと...大丈夫 - それは論理です...すべてのローカル変数は関数の最後にクリアされます。どうも! – Hazer666

関連する問題