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()比較各個方法佔用記憶體的高低,來選擇使用哪種佔用記憶體小的方法。