| 13 | | 14 | 37 | | 38 |39 | |
| 45 | |
46 |
47 |
55 |
|
56 | 57 | |
', $data, ''; 84 | } 85 | } 86 | 87 | /** 88 | * 测试代码运行资源消耗 89 | * 90 | * @param callable $function 运行函数 91 | * @param string $lable 显示标签,为空时返回数组,否则直接输出 92 | */ 93 | public static function run($function, $lable = '') 94 | { 95 | $m0 = memory_get_usage(); 96 | $mp = memory_get_peak_usage(); 97 | $t0 = microtime(true); 98 | $function(); 99 | $t = microtime(true) - $t0; 100 | $m = memory_get_peak_usage(); 101 | $m = $m > $mp ? ($m - $m0) : memory_get_usage() - $m0; 102 | 103 | if (!$lable) { 104 | return array('t' => $t, 'm' => $m); 105 | } 106 | 107 | $time_unit = array('s', 'ms', 'us', 'ns'); 108 | $mem_unit = array('B', 'KB', 'MB', 'GB', 'TB', 'PB'); 109 | 110 | $i = ($t == 0 || $t >= 1) ? 0 : ceil(log($t, 1 / 1000)); 111 | $t = round($t / pow(1 / 1000, $i), 2).' '.$time_unit[$i]; 112 | 113 | $i = ($m == 0) ? 0 : floor(log(abs($m), 1024)); 114 | $m = round($m / pow(1024, $i), 3).' '.$mem_unit[$i]; 115 | 116 | echo "$lable: 时间消耗[time] $t ; 内存预估[memory]: $m
', $message, "
$code \n';
135 | if ($arg = $t['args']) {
136 | $arg = '('.array_reduce($arg, function ($s, &$v) {
137 | return $s.print_r($v, true).',';
138 | });
139 | $arg[strlen($arg) - 1] = ')';
140 | } else {
141 | $arg = '()';
142 | }
143 | if (isset($t['class'])) {
144 | echo "${t['class']}${t['type']}${t['function']}$arg;\n";
145 | } else {
146 | echo "[${t['file']}${t['line']}]${t['function']}$arg;\n";
147 | }
148 | echo '