赞
踩
写在最前面
如果你买了一本PHP的书, 它告诉你: "不用在PHP主动释放资源, 因为PHP会帮你释放"的话, 我建议你, 烧了它.
请手动释放你的资源(Please release resources manually)
问题

内存使用:2259.38M, pid:62602, 类名:app\report\task\ReportSalesDailyByEditorTask:6553, 服务器:common, 请相关人员处理。
一段报表的循环代码占用了2.2G内存
- /**
- * 手动释放资源
- */
- $allJobUser = null;
每个select查询结果的地方都手动释放了一下,内存使用量一下子降到512M以下
测试代码
- <?php
-
- $s = str_repeat('1',1024);
-
- $b = &$s;
-
- $mem_1 = memory_get_usage(); //获取当前占用内存
-
- echo $mem_1 . "<br>";
-
- unset($s);
-
- // $s = null;
-
- $mem_2 = memory_get_usage(); // 再查看当前占用内存
-
- echo $mem_2 . "<br>";
-
- echo $mem_1 - $mem_2 ;

结果分析
- 1、将 $s = null 注释
-
- 237280
-
- 237328
-
- -48
-
- 2、将 unset 注释
-
- 237680
-
- 236768
-
- 912
结论
- 1. unset只是变量计数器减1,,当计数器为0的时候会触发回收
-
- 2. $s=null 会直接触发回收
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。