獲得php代碼使用佔用記憶體的情況

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.