在执行一个导出csv脚步时,当要导出的数据超过3w多条时,就会报错,如下:

Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)

php存储3w多条数据这个数组占用内存超过20M

解决方法:分批取数据,分批处理数据

问题点:一次取多少数据最合适

一次取1w条,减少数据库IO操作次数,但php数组就好较大

一次取1k条,增加了数据库IO操作次数,php数组很小

数据一共41000条

因为是循环查询数据,只能返回空,所以会有一次无效的IO查询

每次请求次数

响应时间

数组库IO次数

5000

11.34

10

1000

8.02

6

2000

7.07

4

3000

5.12

3

4000

4.93

3

综合考虑,觉得使用每次请求1w条数据

代码简单记录下

$filename = '测试';

$head = array('申请时间', '省', '市', '超市品牌');

$field = array('created_time', 'pro_name', 'city_name', 'brand_name');

$csv = ExportCsvService::getInstance(implode(",", $head), $field, $filename);

$param['limit'] = C('SQL_LIMIT');

$i = 0;

while (true) {

$param['current'] = $i + 1;

$info = $rainbowservice->get_list($param)['data']['list'];

if (empty($info)) {

$csv->end();

break;

} else {

$csv->sendDate($info);

}

unset($info);

$i++;

}

csv操作类

class ExportCsvService

{

private $content;

private $filename;

private $field;

private static $instance;

private function __construct($head,$field,$filename)

{

$this->field = $field;

$this->filename = $filename;

$this->content = iconv('UTF-8', 'GBK',$head) . PHP_EOL;

}

/**

* 实例化服务类

* @param $head

* @param $field

* @param $filename

* @return ExportCsvService

*/

public static function getInstance($head,$field,$filename) {

if (!self::$instance instanceof self) {

self::$instance = new self($head,$field,$filename);

}

return self::$instance;

}

/**

* 拼接要导出的数据

* @param $data

*/

public function sendDate($data) {

foreach ($data as $key => $value) {

$temp = [];

foreach ($this->field as $k) {

$temp[] = iconv('UTF-8', 'GBK', $value[$k]);

}

$this->content .= implode(",", $temp) . PHP_EOL; //用英文逗号分开

unset($temp);

}

}

/**

* 输出数据

*/

public function end() {

header("Content-type:text/csv;charset=GBK");

header("Content-Disposition:attachment;filename=" . $this->filename);

header('Cache-Control:must-revalidate,post-check=0,pre-check=0');

header('Expires:0');

header('Pragma:public');

echo $this->content;

}

}

php self 内存,php导致内存溢出相关推荐

  1. [转]避免PHP-FPM内存泄漏导致内存耗尽

    对于PHP-FPM多进程的模式,想要避免内存泄漏问题很简单,就是要让PHP-CGI在处理一定数量进程后退出即可. 否则PHP程序或第三方模块(如Imagemagick扩展)导致的内存泄漏问题会导致内存 ...

  2. 动态内存分配导致内存泄漏之处

    摘要:举了几个动态内存分配过程中,发生内存泄漏的例子 1. 分配了内存,却没有及时删除,导致泄漏 1: void doSomething() 2: { 3: int *pnValue = new in ...

  3. 排查软件关闭时访问了0xfeeefeee内存地址导致内存访问违例的崩溃

    最近在使用duilib开源库实现图片查看工具软件ImageViewer,调试时发现,程序关闭时访问了0xfeeefeee内存地址,触发内存访问违例,导致了软件崩溃.本文分享一下这一问题的排查过程. 1 ...

  4. Windows 10 高占用内存率导致内存不够,从而系统崩溃的配置处理方法

    现有三种方法,按照顺序使用: 方法一: 点击"开始"按钮-->Win键+R-->输入regedit-->确定-->HKLM-->System--> ...

  5. 排查软件启动时访问了0xcdcdcdcd内存地址导致内存访问违例的崩溃

    VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从 ...

  6. 《深入理解Java虚拟机》之Java内存区域与内存溢出异常

    阅读<深入理解Java虚拟机>第2版,结合JDK8的读书笔记.当前文章为书本的第2章节. 2.1.概述 从概念上介绍Java虚拟机内存的各个区域,讲解这些区域的作用,服务对象以及其中可能产 ...

  7. java内存泄露和内存溢出

    内存泄露 是指:对象没有被用到,但是又无法被GC回收就是内存泄露: 分类:经常发生: 发生内存泄露的代码会被多次执行,每次执行,泄露一块内存偶然发生: 在某些特定情况下才会发生一次性: 发生内存泄露的 ...

  8. s5 android5.0内存泄漏,android-最初从位图泄漏了未引用的byte [],但被回收的()导致内存泄漏(直到活动停止)...

    我的位图内存泄漏导致内存不足.我在Android 5.0(Samsung S5)上运行了测试.我已经使用Android Studio(1.5.1 2.0.0预览版7)调查了此问题. HPROF内存转储 ...

  9. 硬核分析|腾讯云原生OS内存回收导致关键业务抖动问题

    实战系列: 精选各种常见的代表性实际问题,分享一步一步思考和解决方法,梳理整个问题脉络,可以学习到解决问题各种技巧和通用技能,锻炼解决问题思维能力,让大家成为解决问题的高手: 往期文章推荐: 一个刁钻 ...

最新文章

  1. 我自己写的3D图形数学库。。。有点乱!
  2. 第三十一篇:SOUI布局之相对于特定兄弟窗口
  3. 30-35岁职场规划深谈,字字戳心
  4. 坚果云下载的文件夹在哪_坚果云文件夹在哪?如何直接访问坚果云文件夹?
  5. 【机器视觉】 gen_measure_arc算子
  6. DNS子域授权及view(三)
  7. 力扣(LeetCode)292. Nim游戏 巴什博奕
  8. Java保留小数点一位的方法
  9. 非法操作 login.php,阅文游戏中心 h5游戏接入wiki
  10. 内存释放_把微信这两个开关关掉, 手机立马释放大量内存, 快去试试吧
  11. react-native 学习
  12. 最新版O泡易支付系统平台 PHP源码 第三方第四方免签支付平台系统 全开源可二开
  13. NPDP产品经理小知识-影响团队绩效的因素
  14. 湖北为何迷失在中国互联网版图 应“引凤归巢”
  15. java日志(四)--jcl和log4j及log4j2使用
  16. 电脑横机服务器维修,电脑横机常见问题的处理方法
  17. Sublime修改成为Python编辑器,设置系统环境变量
  18. 逆幂律模型_为“成功”建模:幂律分布
  19. 嵌入式开发-各种干货
  20. Python搞不定蝴蝶图?

热门文章

  1. 在配置类上写@CompentScan注解来进行包扫描
  2. JDK API实践:Spring怎样取舍Java I-O、集合、反射、动态代理等API的使用
  3. plsql(轻量版)_基本语法
  4. Dubbo的Provider配置
  5. php 在对象中递归 坑,PHP递归问题,数据总是对不上
  6. 微星z370黑苹果_记录一下装了第二台黑苹果(Z370 + High Sierra)
  7. mysql insert 语句优化_分享insert into语句优化的小技巧
  8. log4j2.xml 的标签 loggers 中 root 的属性 level 指的是什么
  9. (转) 对svn分支合并类型和深度的理解
  10. 图像像素灰度内插(Matlab实现)