使用yield之前

function actionIndex($message = 'hello world')
{
    $valuesArray = [];
    // 获取初始内存使用量
    echo '开始'.round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
    for ($i = 1; $i < 800000; $i++) {
        $valuesArray[] = $i;
        // 为了让我们能进行分析,所以我们测量一下内存使用量
        if (($i % 200000) == 0) {
            // 来 MB 为单位获取内存使用量
            echo '中间'.round(memory_get_usage() / 1024 / 1024, 2) . ' MB'. PHP_EOL;
        }
    }
    return $valuesArray;
}
actionIndex();

使用yield之后

function getValues() {
    // 获取内存使用数据
//        echo round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
    file_put_contents("log-memory.txt", '开始'.print_r(round(memory_get_usage() / 1024 / 1024, 2) . ' MB',1).PHP_EOL, FILE_APPEND);
    for ($i = 1; $i < 800000; $i++) {
        yield $i;
        // 做性能分析,因此可测量内存使用率
        if (($i % 200000) == 0) {
            // 内存使用以 MB 为单位
            file_put_contents("log-memory.txt", '中间'.print_r(round(memory_get_usage() / 1024 / 1024, 2) . ' MB',1).PHP_EOL, FILE_APPEND);
            //echo round(memory_get_usage() / 1024 / 1024, 2) . ' MB'. PHP_EOL;
        }
    }
}
//测试
function actionTest()
{
    $myValues = getValues(); // 在循环之前都不会有动作
    echo '开始'.round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
    foreach ($myValues as $Key=> $value) {
//        echo $value.PHP_EOL;
        if (($Key % 200000) == 0) {
            // 来 MB 为单位获取内存使用量
            echo '中间' . round(memory_get_usage() / 1024 / 1024, 2) . ' MB' . PHP_EOL;
        }
    } // 开始生成数据
}
actionTest();

 

版权声明:本文为风吹南下原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/fyiyy/p/16644060.html