memory_get_usage()官方文法
一,函數原型
int memory_get_usage ([ bool $real_usage = false ] )
二,版本相容
PHP 4 >= 4.3.2, PHP 5
三,基礎用法與執行個體
我們可以直接使用 PHP函數 memory_get_usage() 查看系統分配給當前 PHP 指令碼執行佔用的記憶體多少。
代碼如下 |
複製代碼 |
<?php echo memory_get_usage(), '<br />'; // 79248 $tmp = str_repeat('http://3aj.cn/', 4000); // 135408 echo memory_get_usage(), '<br />'; unset($tmp); echo memory_get_usage(); // 79248 ?> |
程式輸出的數字單位為 byte(s),也就是當時 PHP 指令碼使用的記憶體(不含 memory_get_usage() 函數本身佔用的記憶體)。
由上面的例子可以看出,要想減少記憶體的佔用,可以使用 PHP unset() 函數把不再需要使用的變數刪除。類似的還有:PHP mysql_free_result() 函數,可以清空不再需要的查詢資料庫得到的結果集,這樣也能得到更多可用記憶體。
PHP memory_get_usage() 函數還可以有個參數,$real_usage,其值為布爾值。預設為 FALSE,表示得到的記憶體使用量量不包括該函數(PHP 記憶體管理器)佔用的記憶體;當設定為 TRUE 時,得到的記憶體為不包括該函數(PHP 記憶體管理器)佔用的記憶體。
格式化 memory_get_usage() 結果以 KB 為單位輸出
代碼如下 |
複製代碼 |
<?php function convert($size){ $unit=array('b','kb','mb','gb','tb','pb'); return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i]; } echo convert(memory_get_usage(true)); ?> |
自訂函數擷取數組或變數值大小
代碼如下 |
複製代碼 |
<?php function array_size($arr){ ob_start(); print_r($arr); $mem=ob_get_contents(); ob_end_clean(); $mem=preg_replace("/n +/","",$mem); $mem=strlen($mem); return $mem; } $memEstimate=array_size($GLOBALS); ?> |
所以在實際編程中,可以用 memory_get_usage() 函數比較各個方法佔用記憶體的高低,來選擇使用哪種佔用記憶體小的方法。
附帶個使用函數:
代碼如下 |
複製代碼 |
<?php if (!function_exists('memory_get_usage')) { function memory_get_usage() { $pid = getmypid(); if (IS_WIN) { exec('tasklist /FI "PID eq ' . $pid . '" /FO LIST', $output); return preg_replace('/[^0-9]/', '', $output[5]) * 1024; } else { exec("ps -eo%mem,rss,pid | grep $pid", $output); $output = explode(" ", $output[0]); return $output[1] * 1024; } } } ?> |
再來個函數使用例子:
代碼如下 |
複製代碼 |
<?php //memory_get_usage(); $m1 = memory_get_usage(); echo '<br /> m1:',$m1; // m1:80160 $a = 'hello'; $b = str_repeat($a,1000); $m2 = memory_get_usage(); echo '<br /> m2:',$m2; // m2:85624 unset($b); $m3 = memory_get_usage(); echo '<br /> m3:',$m3; // m3:80600 ?> |
所以在實際編程中,可以用PHP memory_get_usage()比較各個方法佔用記憶體的高低,來選擇使用哪種佔用記憶體小的方法。