2009-07-02 16 views

答えて

40

memory_get_usage()を使用できます。

オブジェクトを作成する前に一度実行してから、オブジェクトを作成した後にもう一度実行して、2つの結果の差を取ってください。

+2

メモリ内でそれを行う別の方法はメモリ使用量の取得、オブジェクトのクローン作成、新しいメモリ使用量の取得、クローンの設定解除を行います。しかし、フットプリントがあるので、酷使しないでください。:) –

+0

私は、配列の前後にある 'echo memory_get_usage()'から得られた結果を信じて、その単位は 'KB'にあると思います!! !私は1024でメモリサイズを分割!消費された実際のメモリサイズを取得する。 – Neocortex

+2

いいえバイトではありません。kb http://ca3.php.net/memory_get_usage –

-6

PHPでオブジェクトのサイズを取得する簡単な方法があるのか​​分かりません。あなただけのalgorithを行う必要がありますその

  1. カウントint型
  2. はASCIIに文字列内の文字を変換し、ハードディスク上のint型と
  3. 乗算ASCII値の大きさによって、int型の
  4. 乗算数彼らがどれくらいディスクに乗っているかによって決まります。

もっと良い方法があると確信していますが、これは痛みにもかかわらず動作します。

+4

これは非常識でした。 ;] –

+14

あなたはこの1人の仲間を投稿するために4月1日を待つのを忘れました! – NickT

+0

私は彼が深刻だとは思わない:) – Stann

10

オブジェクトのサイズについてのアイデアを得るために、それは決して正確であるが、比較のための番号を取得する簡単な方法

strlen(serialize($object)); 

を試してみてください。

+1

これにはいくつかの用途があるかもしれませんが、メモリはありません。 PHP <= 5.2は、いくつかのメモリ構造を格納する方法において非常に非効率的です。 – danorton

+0

私はこれを使用して送信前にjson応答をチェックしていましたが、 – clod986

8

既に作成されたオブジェクトまたは配列のサイズを知る必要がある場合は、次のコードを使用して見つけ出すことができます。

<?php 

function rec_copy($src) { 
    if (is_string($src)) { 
    return str_replace('SOME_NEVER_OCCURING_VALUE_145645645734534523', 'XYZ', $src); 
    } 

    if (is_numeric($src)) { 
    return ($src + 0); 
    } 

    if (is_bool($src)) { 
    return ($src?TRUE:FALSE); 
    } 
    if (is_null($src)) { 
    return NULL; 
    } 

    if (is_object($src)) { 
    $new = (object) array(); 
    foreach ($src as $key => $val) { 
     $new->$key = rec_copy($val); 
    } 
    return $new; 
    } 

    if (!is_array($src)) { 
    print_r(gettype($src) . "\n"); 
    return $src; 
    } 

    $new = array(); 

    foreach ($src as $key => $val) { 
    $new[$key] = rec_copy($val); 
    } 
    return $new; 
} 

$old = memory_get_usage(); 
$dummy = rec_copy($src); 
$mem = memory_get_usage(); 

$size = abs($mem - $old); 
?> 

これは本質的に配列構造とそのメンバーのすべてのコピーを作成します。

A 100%正確ではないが、それでも作業バージョンもある:オブジェクトが既に構築された場合のために役立ちます

<?php 

$old = memory_get_usage(); 
$dummy = unserialize(serialize($src)); 
$mem = memory_get_usage(); 

$size = abs($mem - $old); 

希望。

関連する問題