PHP生成器节省内存应用
一、概念:
PHP生成器是从PHP5.5引入的功能,生成器会根据需求计算并产出要迭代的值,这对应用的性能有重大的影响,试想一下,假如标准的PHP迭代器经常在内存中执行迭代操作,这要预先计算出数据集,性能低下,如果要使用特定的方式计算大量数据,对性能的影响更甚,此时我们可以使用生成器,即时计算并产出后续值,不占用宝贵的内存资源。
二、一个简单的生成器示例:
<?php
function myGenerator(){
yield ‘value1’;
yield 'value2';
yield 'value3';
}
foreach(myGenerator() as $yieldValue){
echo $yieldValue."<br>";
}
?>
上述代码输出如下:
value1
value2
value3
三、使用生成器处理大数据CSV文件
function getRow($file){
$handle = fopen($file,'rb');
if($handle == false){
throw new Exception();
}
while(feof($handle) === false){
yield fgetcsv($handle);
}
fclose($handle);
}
foreach(getRows('data.csv') as $row){
print_r($row);
}
说明:上述示例一次只会为csv文件中的一行分配内存,而不会把整个4GB的CSV文件都读取到内存中。
魏巍周山,似曾乡山,凭窗远望,似曾南北。
浙公网安备 33010602011771号