从memory_get_usage()测试结果谈PHP代码的优化写法
博客专区 > 熊猫88 的博客 > 博客详情
从memory_get_usage()测试结果谈PHP代码的优化写法
熊猫88 发表于2年前
从memory_get_usage()测试结果谈PHP代码的优化写法
  • 发表于 2年前
  • 阅读 27
  • 收藏 1
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 通过对一些常量内存的变化,提出一些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操作里,赋值引用和平常的赋值操作,其实是一样的。能尽量少运行函数的情况下,应该尽量减少函数的而用赋值这种操作。

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 19
博文 63
码字总数 65287
×
熊猫88
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: