文档章节

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

© 著作权归作者所有

共有 人打赏支持
熊猫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 数组和对象占用内存谁多谁少的问题。我想起之前我好像也测试过这个问题,和群里人说的对象比数组节省内存的结论相反,我得出的是数组比对象节省内存。 但今天,我...

宇润
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

没有更多内容

加载失败,请刷新页面

加载更多

Spring之IOC和AOP学习摘要

一、IOC(Inversion of Control)或者依赖注入(Dependency Injection) 1、底层实现原理:反射 2、三大核心接口: BeanFactory:简单容器系列,只是实现了容器最基本的功能。 ApplicationC...

狠一点
16分钟前
4
0
缓存架构SpringBoot集成Curator实现zookeeper分布式锁

一、分布式锁简介 1、什么是锁 在单机环境下,当存在多个线程可以同时改变某个共享变量时,就需要同步来实现该功能,使其线程安全。 而同步就是通过锁来实现的。锁保证了同一时刻只有一个线程...

架构师springboot
18分钟前
1
0
11《Java核心技术》之Java提供了哪些IO方式? NIO如何实现多路复用?

一、提出问题 IO 一直是软件开发中的核心部分之一,伴随着海量数据增长和分布式系统的发展,IO 扩展能力愈发重要。幸运的是,Java 平台 IO 机制经过不断完善,虽然在某些方面仍有不足,但已经...

飞鱼说编程
25分钟前
2
0
简单介绍Java 的JAR包、EAR包、WAR包区别

WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。 War是...

linuxprobe16
25分钟前
1
0
55:Mysql用户管理|常用sql语句|mysql数据库备份恢复

1、Mysql用户管理; 场景,为了安全,新建的站点,创建新的用户,或者给已有用户授权,对某个库或者某个表有权限; 语法: grant all on *.* to 'user'@'127.0.0.1' identified by 'password'; g...

芬野de博客
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部