文档章节

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

熊猫88
 熊猫88
发布于 2015/12/21 17:01
字数 667
阅读 30
收藏 1


   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操作里,赋值引用和平常的赋值操作,其实是一样的。能尽量少运行函数的情况下,应该尽量减少函数的而用赋值这种操作。

© 著作权归作者所有

共有 人打赏支持
上一篇: XSS攻击基础
熊猫88
粉丝 18
博文 76
码字总数 65366
作品 0
程序员
私信 提问
PHP错误:Allowed memory size of xxx bytes(一)

在写PHP程序的时候,需要处理的数据比较大的时候经常会出现“Allowed memory size of xxx bytes”这个问题,对这个问题一般也是去修改php.ini中的配置,那是一个很有效的方法,但是有没有其他...

saintatgod
2016/01/19
1K
0
PHP 对象比数组省内存?错!数组比对象省内存?错!

刚刚一个群里有人引出了 PHP 数组和对象占用内存谁多谁少的问题。我想起之前我好像也测试过这个问题,和群里人说的对象比数组节省内存的结论相反,我得出的是数组比对象节省内存。 但今天,我...

宇润
2018/08/18
0
0
PHP笔记 变量和内存管理

鸟哥的博客是个大宝库,正在从头看起。 《深入理解PHP内存管理之谁动了我的内存》 http://www.laruence.com/2011/03/04/1894.html 1、memorygetusage 函数 int memorygetusage ([ bool $real...

daweilang
2017/03/12
0
0
PHP unset销毁变量并释放内存

PHP的unset()函数用来清除、销毁变量,不用的变量,我们可以用unset()将它销毁。但是某些时候,用unset()却无法达到销毁变量占用的内存!我们先看一个例子: <?php $s=str_repeat('1',255); ...

本杰明刘能
2016/11/22
8
0
PHP 性能分析与实验(二)——PHP 性能的微观分析

【编者按】此前,阅读过了很多关于 PHP 性能分析的文章,不过写的都是一条一条的规则,而且,这些规则并没有上下文,也没有明确的实验来体现出这些规则的优势,同时讨论的也侧重于一些语法要...

OneAPM蓝海讯通
2015/09/09
71
0

没有更多内容

加载失败,请刷新页面

加载更多

js 写文件

//写文件function doSave(value, type, name) {    var blob;    if (typeof window.Blob == "function") {        blob = new Blob([value], {type: type});    }......

重城重楼
8分钟前
0
0
Ubuntu and Apache 搭建 Let's Encrypt SSL Https

本文参考来着来自https://www.howtoing.com/install-free-lets-encrypt-ssl-certificate-for-apache-on-debian-and-ubuntu 感谢作者的分享 本事例环境介绍 ubuntu (Version 16.04.1 LTS) ubu......

罗培海
12分钟前
5
0
如何优雅的使用RabbitMQ

目录 RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具。消息队列的使用场景大概有3种: 1、系统集成,分布式系统的...

编程SHA
15分钟前
0
0
阿里开发者们的第19个感悟:Simple is better.

1月16日,Simple is better.这是我们送给开发者的第19个感悟。 Mars,基于矩阵的统一计算框架。已经开源。那么:Mars 是什么,能做什么,怎么做的;Mars 如何分布式地执行等。可以与继盛多交...

阿里云官方博客
16分钟前
1
0
StringBuffer 和 StringBuilder 的 3 个区别

StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题。这么简单的一道题,栈长在最近的面试过程中,却经常遇到很多求职者说反...

Java技术栈
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部