从memory_get_usage()测试结果谈PHP代码的优化写法


   PHP内部有一个对内存的管理方法memory_get_usage() 可以直接用来查看当前使用了的内存情况。
   1.echo   memory_get_usage();内存的使用情况
   2.测试内存变化
     echo  memory_get_usage();
     echo   "<br />";
      echo  memory_get_usage();\
      测试结果:
      118896
      118896
      分析:echo 输出语句是不消耗php内存的,直接将结果打印到屏幕而已
   3.增加一个函数test 并运行
   function   test($num) {
     $arr = array();
  for($i=0;$i<$num;$i++) {
      $arr[$i] = $i*$i;
       }
       return   $arr;
        }
echo  memory_get_usage();
echo   "<br />";
echo  memory_get_usage();
测算结果:
120104
120104
结论:内存的使用增大,虽然没有使用函数,但是函数已经装载进入内存
4.对函数进行执行操作:
function   test($num) {
     $arr = array();
  for($i=0;$i<$num;$i++) {
      $arr[$i] = $i*$i;
  }
   return  $arr;
}
echo  memory_get_usage();
 test(100);
echo   "<br />";
echo  memory_get_usage();
测算结果:
120216
120216
结论:运算是消耗一定内存的(如果程序运行了没有意义的程序,会消耗多余内存)
5.在程序运算的过程中,把$a的值储存起来进行使用
function   test($num) {
     $arr = array();
  for($i=0;$i<$num;$i++) {
      $arr[$i] = $i*$i;
  }
   return  $arr;
}
echo  memory_get_usage();
  $a = test(100);
echo   "<br />";
echo  memory_get_usage();
   运行结果:
   120264
   128920
结论:当程序没有输出储存的时候,运算消耗的内存比较少,当需要把运算结果进行储存的时候,会消耗大量的内存,储存量越大,内存消耗越严重
面对比较大的数组用unset()是一个比较节约内存的办法
6.
echo  memory_get_usage();
  $a = test(100);
echo   "<br />";
echo  memory_get_usage();
function   test($num) {
     $arr = array();
  for($i=0;$i<$num;$i++) {
      $arr[$i] = $i*$i;
  }
   return  $arr;
}
测试结果:
120320
128984
结论:没有优先声明的函数会比自动去后面查询函数更加消耗部分内存(每个优先自动加载的函数会在php里建立一个类似索引的标记,调用的时候可以直接运用) 把常用的函数库进行优先加载,可以节省部分内存
7.
function   test($num) {
     $arr = array();
  for($i=0;$i<$num;$i++) {
      $arr[$i] = $i*$i;
  }
   return  $arr;
}

echo  memory_get_usage();
$a = test(100);
$b = $a;
echo   "<br />";
echo  memory_get_usage();
测试结果:
120304
129016
当$b  = test(100);
得到的测试结果:
120408
137704
而当$b = &$a 的时候(引用)
测试结果:
120304
129016
结论:每个函数的运行都会预先加载,增加内存,在常用的$b=$a操作里,赋值引用和平常的赋值操作,其实是一样的。能尽量少运行函数的情况下,应该尽量减少函数的而用赋值这种操作。

你可能感兴趣的:(从memory_get_usage()测试结果谈PHP代码的优化写法)