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++类静态变量的一种使用特例
不同进程里的数据默认情况下是互不影响的. 静态变量是属于类本身的,它的所有实例可以共享这个静态变量,但是有个先天条件就是在同一个进程的情况下!!
随机推荐
- Python装饰器使用技巧
装饰器 装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多初次接触这个知识的人来讲,这个功能有点绕,自学时直接绕过去了,然后面试 ...
- 浅析阿里云API网关的产品架构和常见应用场景
自上世纪60年代计算机网络发展开始,API(Application Programming Interface )随之诞生,API即应用程序接口,是实现系统间衔接的桥梁.时至今日,API市场已经形成了 ...
- 【书上讲解】最大m段子段和问题
描述 [题解] 设f[i][j]表示前i个数字分成了j段的最大子段和. 则f[i][j] = max(f[i-1][j]+a[i] (第i个数字和第j段合在一起),f[k][j-1]+a[i] (第i ...
- linux 下vi与vim区别以及vim的使用
vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对 ...
- SP8222 NSUBSTR - Substrings(后缀自动机+dp)
传送门 解题思路 首先建出\(sam\),然后把\(siz\)集合通过拓扑排序算出来.对于每个点只更新它的\(maxlen\),然后再从大到小\(dp\)一次就行了.因为\(f[maxlen-1]&g ...
- js滚动到顶部底部代码
<!DOCTYPE HTML> <html> <head> <meta charset=UTF-8> <title>SCROLL</t ...
- monkeyrunner 进行多设备UI测试
monkeyrunner进行多设备UI测试 首先你要连接好多个手机设置好已经连接好的手机的ip列表ipp = ['192xxx','192xxx']杀掉之前所有appium进程subprocess. ...
- db2,用户名密码不对导致无法连接数据库: Reason: User ID or Password invalid. ERRORCODE=-4214, SQLSTATE=28000
文章目录 背景 解决 背景 qa需要db2的demo,运维给安装完db2,启动报错 com.ibm.db2.jcc.am.io: [jcc][t4][2013][11249][4.7.112] Con ...
- export 与 export default
export 和 import 都属于 ES6 的内容. node 的 module 遵循的是 CommonJS规范,requirejs遵循AMD,seajs遵循CMD,虽各有不同, 但总之还是希望保 ...
- js 点击获取验证码后的倒数60s
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <script ...