php 里面想要处理一个文本文件,有一个方法是使用 file() 函数,但是这个函数会读取文件所有内容,可能会导致占用很大内存。

// 28.1 M 的文本文件, 200w 行
$file = 'storage/logs/runningtime/2019-03-17.log';$file = file($file);// 219.28M
dd(round(memory_get_usage() / 1024 / 1024, 2) . 'M');

但是我们可以以另外一种方式处理,使用 fgets 逐行读取,逐行处理。

// 28.1 M 的文本文件, 200w 行
$file = 'storage/logs/runningtime/2019-03-17.log';$fp = fopen($file, 'r');
while (($line = fgets($fp)) !== false) {// do something
}// 1.87M
dd(round(memory_get_usage() / 1024 / 1024, 2) . 'M');

现在,我们也有另外一种选择,使用 yield 关键字,用法如下:

// 28.1 M 的文本文件, 200w 行
$file = 'storage/logs/runningtime/2019-03-17.log';function generator($file)
{$fp = fopen($file, 'r');while (($line = fgets($fp)) !== false) {yield $line;}fclose($fp);
}foreach (generator($file) as $line) {// do something
}// 1.86M
dd(round(memory_get_usage() / 1024 / 1024, 2) . 'M');

转载于:https://www.cnblogs.com/eleven24/p/10549542.html

使用 yield 减少内存消耗相关推荐

  1. spark减少内存消耗_将内存消耗减少20倍

    spark减少内存消耗 这将是另一个故事,与我们分享有关内存相关问题的最新经验. 该案例是从最近的客户支持案例中提取的,在该案例中,我们遇到了一个行为异常严重的应用程序,该应用程序因生产中的OutOf ...

  2. PHP 实现大数据(30w量级)表格导出(导出excel) 提高效率,减少内存消耗,终极解决方案

    使用php做项目开发的同学,一定都会有过使用php进行excel表格导出的经历,当导出少量数据还好,一旦数据量级达到5w. 10w.20w甚至30以上的时候就会面临同样的问题: 1.导出时间变得很慢, ...

  3. 宝塔linux减少内存消耗,liunx宝塔面板解决rsyslogd内存占用很高的问题

    大鸟博客用的vps是瓦工的3核2G,cn2 gia线路的vps方案,按理说这么个小博客2G内存是足够使用了.可以是最近常常发现内存占用一度达到90%.一度怀疑是缓存所致,但是我的menmcached的 ...

  4. python sizeof_python 变量作用域 v.__sizeof__() python 深复制 一切皆对象 尽量减少内存消耗 赋值语句的原理...

    CPython implementation detail: This is the address of the object in memory. copy - Shallow and deep ...

  5. python内存消耗大吗_如何减少python内存的消耗?

    标签: Python 打算删除大量涉及像C和C++语言那样的复杂内存管理.当对象离开范围,就会被自动垃圾收集器回收.然而,对于由Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情. ...

  6. Docker中的Java内存消耗优化以及我们如何使用Spring Boot

    ---- / BEGIN/ ---- 如果您的Docker容器占用太多内存而无法达到最佳性能,请阅读下文以了解一个团队如何找到解决方案. 最近,我所在的团队在部署我们的微服务(AWS上Docker中的 ...

  7. idea 启动多个项目 减少内存占用

    项目采用 spring boot 和spring cloud 框架,多个模块同时启动时 消耗内存过大,导致电脑崩溃.网上找到减少内存消耗的方法,在此记录一下.参考了https://blog.csdn. ...

  8. 将内存消耗减少20倍

    这将是另一个故事,与我们分享有关内存相关问题的最新经验. 该案例是从最近的客户支持案例中提取的,在该案例中,我们遇到了一个行为异常严重的应用程序,该应用程序因生产中的OutOfMemoryError消 ...

  9. 实例解读:如何减少Docker中的Java内存消耗

    最近,我所在的团队面临着部署微服务(Java+SpringMVC in Docker on AWS)的问题.主要问题是,很多非常轻巧的应用程序消耗了太多的内存.因此,我们经过多方尝试找到了在Docke ...

最新文章

  1. Sublime搭建Python环境
  2. 壕!甲骨文创始人 8000 万美元买豪宅后打算拆掉
  3. 为什么要叫python-为什么要学 Python?
  4. rxjs里debounceTime operators的用法
  5. 5分钟内完成胸部CT扫描机器学习
  6. JavaScript -- arguments、apply 、call、bind
  7. 整合Servlet到Spring容器
  8. 【精选】Java高频面试题278道附答案,通关中大型互联网企业工程师必备
  9. java药品管理系统源代码,基于jsp的药品管理系统-JavaEE实现药品管理系统 - java项目源码...
  10. 代理IP软件如何只切换浏览器IP地址
  11. 你对“happen-before原则”的理解可能是错的?
  12. h5 app跳转客服咨询 临时会话 (没有开通在线咨询、无法会话)
  13. 计算机桌面图标有双影,win7旗舰版桌面图标出现重影怎么办 win7旗舰版桌面图标没有了如何恢复...
  14. 【雕爷学编程】Arduino动手做(103)---四路无线遥控套件
  15. 万能计算机作文,万能通用作文600字
  16. 判断一个整数是否是2的倍数
  17. dataTable固定列固定行
  18. 与计算机相关的哲学家,数:计算机、哲学家及对数的含义的探索
  19. 如何解决无法显示隐藏文件夹
  20. android客户端与服务器交互数据(基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合)

热门文章

  1. 超好用!5款开源的移动自动化测试工具
  2. 通过项目逐步深入了解Mybatis二
  3. Android 动画框架详解,第 1 部分
  4. SVN入门:流程简介 安装配置 项目库配置 客户端 上线方案
  5. SQL Server2005的连接和配置(入门)
  6. Java基础学习总结(24)——Java单元测试之JUnit4详解
  7. 堆栈和堆得区别与垃圾回收
  8. java checkbox
  9. 使用微软的 ilasm 和 ildasm 对. net程序进行编译和反编译
  10. shell脚本if条件总结