php 类静态变量 和 常量消耗内存及时间对比
在对类执行100w次循环后, 常量最快,变量其次,静态变量消耗时间最高
其中:
常量消耗:101.1739毫秒
变量消耗:2039.7689毫秒
静态变量消耗:4084.8911毫秒
测试代码:
- class Timer_profiler {
- public static $begin_timer;
- public static $finish_timer;
- public static $timer_html;
- /**
- * 计算时间差
- * @return type
- */
- public static function getRecordTimer() {
- return (self::getFinishTimer() - self::getBeginTimer()) * 1000;
- }
- /**
- * 生成输出HTML
- * @param type $message
- * @return type
- */
- public static function recordHtml($message = '') {
- self::setFinishTimer();
- return "<p>{$message}耗时: " . self::getRecordTimer() . " 毫秒</p>";
- }
- /**
- * 设置开始时间
- */
- public static function setBeginTimer() {
- self::$begin_timer = self::getTime();
- }
- /**
- * 设置结束时间
- */
- public static function setFinishTimer() {
- self::$finish_timer = self::getTime();
- }
- /**
- * 获取开始时间
- * @return type
- */
- public static function getBeginTimer() {
- return self::$begin_timer;
- }
- /**
- * 获取结束时间
- * @return type
- */
- public static function getFinishTimer() {
- return self::$finish_timer;
- }
- /**
- * 获取带微妙的时间戳
- * @return type
- */
- private static function getTime() {
- list($usec, $sec) = explode(" ", microtime());
- return (number_format($sec+$usec,6,'.', ''));
- }
- }
- function computeTime($otime,$message){
- return;
- $ntime = xdebug_time_index();
- $str = '';
- $str .= $message . ($ntime*1000-$otime*1000);
- $str .= "<br>";
- echo $str;
- }
- function getMemoryUsed(){
- $str = '消耗内存<h3 style="color:red"> ';
- $str .= round(memory_get_usage()/1024/1024, 4).'MB';
- $str .= '</h3>';
- echo $str;
- }
- $count_i = 100*10000;
- //$count_i = 100000;
- Timer_profiler::setBeginTimer();
- computeTime(xdebug_time_index(),'开始执行');
- echo Timer_profiler::recordHtml('开始执行');
- getMemoryUsed();
- class TestVar {
- public $A1 = 'aaaaaaaaaaaaaaaaa';
- public $A2 = 'aaaaaaaaaaaaaaaaa';
- public $A3 = 'aaaaaaaaaaaaaaaaa';
- public $A4 = 'aaaaaaaaaaaaaaaaa';
- public $A5 = 'aaaaaaaaaaaaaaaaa';
- public $A6 = 'aaaaaaaaaaaaaaaaa';
- public $A7 = 'aaaaaaaaaaaaaaaaa';
- public $A8 = 'aaaaaaaaaaaaaaaaa';
- }
- $TestVar = new TestVar();
- for($i=0;$i<=$count_i;$i++){
- $t = $TestVar->A1;
- $t = $TestVar->A2;
- $t = $TestVar->A3;
- $t = $TestVar->A4;
- $t = $TestVar->A5;
- $t = $TestVar->A6;
- $t = $TestVar->A7;
- $t = $TestVar->A8;
- }
- getMemoryUsed();
- echo Timer_profiler::recordHtml('变量完成');
- computeTime(xdebug_time_index(),'变量完成');
- Timer_profiler::setBeginTimer();
- class TestStaticVar {
- static $A1 = 'aaaaaaaaaaaaaaaaa';
- static $A2 = 'aaaaaaaaaaaaaaaaa';
- static $A3 = 'aaaaaaaaaaaaaaaaa';
- static $A4 = 'aaaaaaaaaaaaaaaaa';
- static $A5 = 'aaaaaaaaaaaaaaaaa';
- static $A6 = 'aaaaaaaaaaaaaaaaa';
- static $A7 = 'aaaaaaaaaaaaaaaaa';
- static $A8 = 'aaaaaaaaaaaaaaaaa';
- }
- for($i=0;$i<=$count_i;$i++){
- $t = TestStaticVar::$A1;
- $t = TestStaticVar::$A2;
- $t = TestStaticVar::$A3;
- $t = TestStaticVar::$A4;
- $t = TestStaticVar::$A5;
- $t = TestStaticVar::$A6;
- $t = TestStaticVar::$A7;
- $t = TestStaticVar::$A8;
- }
- getMemoryUsed();
- echo Timer_profiler::recordHtml('静态变量完成');
- computeTime(xdebug_time_index(),'静态变量完成');
- Timer_profiler::setBeginTimer();
- class TestConstVar {
- const A1 = 'aaaaaaaaaaaaaaaaa';
- const A2 = 'aaaaaaaaaaaaaaaaa';
- const A3 = 'aaaaaaaaaaaaaaaaa';
- const A4 = 'aaaaaaaaaaaaaaaaa';
- const A5 = 'aaaaaaaaaaaaaaaaa';
- const A6 = 'aaaaaaaaaaaaaaaaa';
- const A7 = 'aaaaaaaaaaaaaaaaa';
- const A8 = 'aaaaaaaaaaaaaaaaa';
- }
- for($i=0;$i<=$count_i;$i++){
- $t = TestConstVar::A1;
- $t = TestConstVar::A2;
- $t = TestConstVar::A3;
- $t = TestConstVar::A4;
- $t = TestConstVar::A5;
- $t = TestConstVar::A6;
- $t = TestConstVar::A7;
- $t = TestConstVar::A8;
- }
- getMemoryUsed();
- echo Timer_profiler::recordHtml('常量完成');
- computeTime(xdebug_time_index(),'常量完成');
- //echo Timer_profiler::recordHtml('共执行');
- computeTime(xdebug_time_index(),'共执行');
- exit;
php 类静态变量 和 常量消耗内存及时间对比的更多相关文章
- 常量和静态变量会先载入内存后在进行执行php代码
static $test=1;//在php执行前就已经写入内存$test++;var_dump($test);static $test=10;//在php执行前就已经写入内存var_dump($tes ...
- PHP接口中的静态变量、常量与类中静态变量、常量的区别
接口: 1 不能够定义静态变量(常量除外) 2 定义的常量 const YOUCONST = VALUE,不能在子类中覆盖,在子类中以 interfaceName::YOUCONST的方式调用 3 不 ...
- PHP 类属性 类静态变量的访问
php的类属性其实有两种,一种是类常量,一种是类静态变量.两种容易引起混淆. 如同静态类方法和类实例方法一样,静态类属性和实例属性不能重定义(同名),但静态属性可以和类常量同名. <?php c ...
- python类静态变量
python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...
- oc 基本语法 类 静态变量 常量
// // ReViewClass.h // hellowWorld // 本类是oc复习练手类 // Created by hongtao on 2018/3/26. // Copyright © ...
- Java 静态变量,常量和方法
static 关键字 例如:在球类中使用PI这个常量,可能除了本类需要这个常量之外,在另外一个圆类中也需要使用这个常量.这时没有必要 在两个类中同时创建PI这个常量,因为这样系统会将这两个不在同一个类 ...
- Java静态变量,常量,成员变量,局部变量
类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰.(static表示“全局的”.“静态的”,用来修饰成员变量和成员方法,或静态代码块(静态代码块独立于类成员,jvm加载类时会执行 ...
- PHP:第一章——PHP中静态变量和常量
<?php header("Content-Type:text/html;charset=utf-8"); /******************************** ...
- C++类静态变量的一种使用特例
不同进程里的数据默认情况下是互不影响的. 静态变量是属于类本身的,它的所有实例可以共享这个静态变量,但是有个先天条件就是在同一个进程的情况下!!
随机推荐
- [人物存档]【AI少女】【捏脸数据】朴素风格
点击下载(城通网盘):AISChaF_20191115113752642.png 点击下载(城通网盘):AISChaF_20191111232359711.png
- C之输入输出函数(1) -- fgets()
https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_71/rtref/fgets.htm #include <stdio.h> ...
- 【hihocoder 1554】最短的 Nore0061
[链接]http://hihocoder.com/problemset/problem/1554 [题意] 中文题 [题解] DP; 设f[i][j][k]表示前i个字符,第一个串已经得到了前j个字符 ...
- 生产环境用到的几个有用的Linux命令
有时候,几个有用的Linux命令可以很大的提高你的工作效率. 1.free -m 这个命令我暂时就只会这么使用,它可以查看服务器的内存资源 2.top 这个命令同样可以查看服务器的资源,当然我还是用它 ...
- 屏幕左侧鼠标常驻,隐藏部分显示,文章鼠标常驻,隐藏部分隐藏(我的hexo next博客)
文章目录 如图 功能 代码 博客地址:https://mmmmmm.me 源码:https://github.com/dataiyangu?tab=repositories 如图 功能 最左侧添加透明 ...
- 反射与类加载之反射基本概念与Class(一)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述反射与类加载: [三种获取Class对象的方式] [ ...
- 新建一个servlet类,继承HttpServlet,但是无法导入HttpServlet包
描述: 原因:缺少tomcat的libraries(HttpServlet对应位置在tomcat的lib中====) 解决: 1. 2. 3. 4.
- 008-Java的StringBuilder和StringBuffer
StringBuffer 和 StringBuilder 与String的不同 String Java中十分重要的类;被声明为final class.除了hash这个属性, 其他属性也均声明为fina ...
- position:relative/static/fixed/absolute定位的区别以及使用场景
absolute是相对于自己最近的父元素来定位的,relative是相对于自己来定位的 relative 不脱离文档流,absolute 脱离文档流.也就是说:relative 的元素尽管表面上看到它 ...
- 运行Hama实例PageRank