使用 yield 减少内存消耗
生活随笔
收集整理的這篇文章主要介紹了
使用 yield 减少内存消耗
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 减少内存消耗的全部內容,希望文章能夠幫你解決所遇到的問題。