Bacysoft.cn

 找回密码
 邀请注册
查看: 18615|回复: 0
打印 上一主题 下一主题

Discuz!X 内核性能测试

[复制链接]
跳转到指定楼层
楼主
发表于 2017-9-10 20:13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Discuz!X 内核提供了一种简单的性能测试方法,可以用于测试内核性能或者用户插件运行性能。即使用:
  1. C::analysisStart 和 C::analysisStop
复制代码
两个函数,C::analysisStart() 用于设置检测起点,C::analysisStop() 用于停止检测。下面我们来看一段具体的代码:
  1. require '../../class/class_core.php';

  2. C::analysisStart('test');

  3. $discuz = C::app();
  4. $discuz->init();

  5. echo "<pre>".print_r(C::analysisStop('test'),1)."</pre>";
复制代码
此段代码将计算出 Dz 内核的加载时间,以及加载前后的内存占用情况,运行后输出结果如下:
  1. Array
  2. (
  3.     [start_memory_get_usage] => 407696
  4.     [start_memory_get_real_usage] => 2097152
  5.     [start_memory_get_peak_usage] => 407696
  6.     [start_memory_get_peak_real_usage] => 2097152
  7.     [time] => 28.76306
  8.     [stop_memory_get_usage] => 1103120
  9.     [stop_memory_get_real_usage] => 2097152
  10.     [stop_memory_get_peak_usage] => 1303416
  11.     [stop_memory_get_peak_real_usage] => 2097152
  12. )
复制代码
time 的单位是毫秒,也就是本次内核加载用了 28ms,内存相关参数的单位是字节,可以看到 real_usage 等于 2097152,也就是差不多2M字节了。运行此脚本的主机配置为:Intel® Core™ i5-4460 CPU @ 3.20GHz × 4 ,16GB 内存。

下面我们再看看 C::analysisStart 和 C::analysisStop 的源码:
  1. public static function analysisStart($name){
  2.                 $key = 'other';
  3.                 if($name[0] === '#') {
  4.                         list(, $key, $name) = explode('#', $name);
  5.                 }
  6.                 if(!isset($_ENV['analysis'])) {
  7.                         $_ENV['analysis'] = array();
  8.                 }
  9.                 if(!isset($_ENV['analysis'][$key])) {
  10.                         $_ENV['analysis'][$key] = array();
  11.                         $_ENV['analysis'][$key]['sum'] = 0;
  12.                 }
  13.                 $_ENV['analysis'][$key][$name]['start'] = microtime(TRUE);
  14.                 $_ENV['analysis'][$key][$name]['start_memory_get_usage'] = memory_get_usage();
  15.                 $_ENV['analysis'][$key][$name]['start_memory_get_real_usage'] = memory_get_usage(true);
  16.                 $_ENV['analysis'][$key][$name]['start_memory_get_peak_usage'] = memory_get_peak_usage();
  17.                 $_ENV['analysis'][$key][$name]['start_memory_get_peak_real_usage'] = memory_get_peak_usage(true);
  18.         }

  19.         public static function analysisStop($name) {
  20.                 $key = 'other';
  21.                 if($name[0] === '#') {
  22.                         list(, $key, $name) = explode('#', $name);
  23.                 }
  24.                 if(isset($_ENV['analysis'][$key][$name]['start'])) {
  25.                         $diff = round((microtime(TRUE) - $_ENV['analysis'][$key][$name]['start']) * 1000, 5);
  26.                         $_ENV['analysis'][$key][$name]['time'] = $diff;
  27.                         $_ENV['analysis'][$key]['sum'] = $_ENV['analysis'][$key]['sum'] + $diff;
  28.                         unset($_ENV['analysis'][$key][$name]['start']);
  29.                         $_ENV['analysis'][$key][$name]['stop_memory_get_usage'] = memory_get_usage();
  30.                         $_ENV['analysis'][$key][$name]['stop_memory_get_real_usage'] = memory_get_usage(true);
  31.                         $_ENV['analysis'][$key][$name]['stop_memory_get_peak_usage'] = memory_get_peak_usage();
  32.                         $_ENV['analysis'][$key][$name]['stop_memory_get_peak_real_usage'] = memory_get_peak_usage(true);
  33.                 }
  34.                 return $_ENV['analysis'][$key][$name];
  35.         }
复制代码
源码逻辑很简单,这里就不多说了。
您需要登录后才可以回帖 登录 | 邀请注册

本版积分规则



京ICP备08000958号-1|腾讯云|阿里云|联系方式|Bacysoft.cn

GMT+8, 2024-12-25 16:13 , Processed in 0.016611 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表