关于PHPExcel内存泄漏问题解决方法
使用 PHPExcel 来生成 excel 文档是比较消耗内存的,有时候可能会需要通过一个循环来把大数据切分成若干个小的` excel 文档保存来避免内存耗尽。
然而 PHPExcel 存在 circular references 的情况(貌似在最新的 1.6.5 版本中仍然没有去解决这个问题),如果在一次 http 请求过程中反复多次构建 PHPExcel 及 PHPExcel_Writer_Excel5 对象实例来完成多个 excel 文档生成操作的话,所有被构建的对象实例都无法在 http 请求结束之前及时释放,从而造成内存泄漏。
解决办法是在 PHPExcel_Worksheet 类中增加方法:
复制代码 代码如下:
public function Destroy() {
foreach($this->_cellCollection as $index => $dummy) {
$this->_cellCollection[$index] = null;
}
}
并在 PHPExcel 类中增加方法:
复制代码 代码如下:
public function Destroy() {
foreach($this->_workSheetCollection as $index => $dummy) {
$this->_workSheetCollection[$index]->Destroy();
$this->_workSheetCollection[$index] = null;
}
}
然后在需要资源回收的地方显式的调用 PHPExcel::Destroy() 来处理循环引用的问题。注意 __destruct() 方法是在对象被认为可以被释放的时候才会被调用,所以循环引用的处理不能放到 __destruct() 来进行。
-
校园元旦晚会活动方案15篇
为了确保事情或工作科学有序进行,就不得不需要事先制定方案,方案可以对一个行动明确一个大概的方向。方案的格式和要求是什么样的呢?以下是小编整理的校园元旦晚会活动方案,仅供参考,欢迎大家阅读。校园元旦晚会活动方案1为了活跃校园的气氛,迎接即将到来的元旦节,充...
-
新生入学活动方案
为确保事情或工作高质量高水平开展,时常需要预先制定方案,方案具有可操作性和可行性的特点。那么制定方案需要注意哪些问题呢?以下是小编收集整理的新生入学活动方案,仅供参考,大家一起来看看吧。新生入学活动方案1一、指导思想:把新生入学仪式和家长会结合起来,通过...
-
幼儿园三八节活动方案14篇
为了确保事情或工作科学有序进行,我们需要提前开始方案制定工作,方案是解决一个问题或者一项工程,一个课题的详细过程。写方案需要注意哪些格式呢?下面是小编帮大家整理的幼儿园三八节活动方案,仅供参考,希望能够帮助到大家。幼儿园三八节活动方案篇1活动目标:1、知道...
-
有关饮食方案模板合集六篇
为了确保事情或工作得以顺利进行,就不得不需要事先制定方案,方案属于计划类文书的一种。那么问题来了,方案应该怎么写?下面是小编帮大家整理的饮食方案6篇,供大家参考借鉴,希望可以帮助到有需要的朋友。饮食方案篇1游泳饮食游泳需要大量的能量,因为这项运动要调动身体...