PHPExcel内存泄漏问题

摘要:
使用PHPExcel来生成excel文档是比较消耗内存的,有时候可能会需要通过一个循环来把大数据切分成若干个小的excel文档保存来避免内存耗尽。注意__destruct()方法是在对象被认为可以被释放的时候才会被调用,所以循环引用的处理不能放到__destruct()来进行。

使用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() 来进行。

免责声明:文章转载自《PHPExcel内存泄漏问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇删除Visual Studio 2019ASP.net Application及Session 的start end 方法总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

thinkphp整合系列之phpexcel生成生成excel文件

在后台管理中会经常需要将数据生成excel表格的; php生成excel有两种方案; 一种是通过phpexcel生成xls格式的表格文件; 另一种则直接通过逗号换行生成csv格式的表格文件; 这里先讲解thinkphp整合phpexcel的过程; 示例项目:http://git.oschina.net/shuaibai123/thinkphp-bjyadm...

ClosedXML导出Excel简单使用

c#经常会用到导出excel。 ClosedXML是一个.NET库,用于读取,操作和写入Excel 2007+(.xlsx,.xlsm)文件。它旨在提供一个直观且用户友好的interface来处理基础的OpenXML API。 ClosedXML许可证是MIT。 示例: using ClosedXML.Excel; using DoExcel.Models...

C# Excel导入导出

目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图、NOPI以及C#代码 3. Excel导出:介绍C#如何调用NPOI进行Excel导出,包含:流程图、NOPI以、C#代码以及代码分析 4. 源码下载:展示运行图及源码下载  1. 介绍 1.1 第三方类库:NPOI...

laravel实现excel表的导入导出功能

1.这是个我去公司之后曾经折磨我很久很久的功能查阅了很多资料但是功夫不负有心人在本人的不懈努力下还是实现了这个功能(ps看不懂我下面说讲述的可以参考这个laravel学院的官方文档 https://xueyuanjun.com/post/2024.html) 官方主页:https://laravel-excel.com/ 1.1使用的时候先用compose...

如何用C#制作Excel AddIn

AddIn 中文翻译为插件,有时候也叫Plug In,我的理解是,根据程序开发商提供的接口,让程序加载自定义的代码片段以完成某种功能。 这个需求源自于一个朋友的要求,他向我陈述了产生需求的原因。 朋友所在工厂的质量部每天需要检测大量的产品零部件,并且要把检测的数据制作成报表,这是QC测量员的日常工作。由于最近公司的订单增多,生产任务的增多也导致测量员每天需...

SQL sever删除全空值的行出现错误提示!

每次导入excel表到数据库到SQL里就会多若干行显示全是'NULL'的行,删除的时候出现如下提示"键列信息不足或不正确。更新影响到多行!" 解决办法:从您的描述中,可以得知您从Excel 中导入数据到SQL Server中。导入后的表不存在主键列,同时出现多行所有列全为Null的情况。在删除这部分行的时候,出现“键列信息不足或不正确。更新影响到多行”。如...