文档章节

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

熊猫88
 熊猫88
发布于 2015/12/21 17:01
字数 667
阅读 29
收藏 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操作里,赋值引用和平常的赋值操作,其实是一样的。能尽量少运行函数的情况下,应该尽量减少函数的而用赋值这种操作。

© 著作权归作者所有

共有 人打赏支持
熊猫88
粉丝 18
博文 76
码字总数 65287
作品 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内存管理之谁动了我的内存》 http://www.laruence.com/2011/03/04/1894.html 1、memorygetusage 函数 int memorygetusage ([ bool $real...

daweilang
2017/03/12
0
0
PHP 对象比数组省内存?错!数组比对象省内存?错!

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

宇润
昨天
0
0
PHP 性能分析与实验(二)——PHP 性能的微观分析

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

OneAPM蓝海讯通
2015/09/09
71
0
PHP unset销毁变量并释放内存

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

本杰明刘能
2016/11/22
8
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周日乱弹 —— 种族不同,禁止交往

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《苏菲小姐》- 鱼果 《苏菲小姐》- 鱼果 手机党少年们想听歌,请使劲儿戳(这里) @貓夏:下大雨 正是睡觉的好时候 临睡前...

小小编辑
今天
211
6
Python 搭建简单服务器

Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下: 1.等待客户端的链接,服务器会收到一个http协议的请求数据报 2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文...

代码打碟手
今天
1
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
今天
0
0
qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部