释放 php 脚本中的内存



我已经为我正在做的一个项目编写完了php脚本。我的下一步是,我想看看我是否可以从内存的角度改进我的代码,因为我的一些脚本会消耗大量内存。我一直在对此进行研究,一个建议是 NULL 和取消设置变量,但我从未看到这样做的例子。因此,我想举一个在我的脚本中完成的常见操作的示例,并想知道这是否是执行此操作的正确方法:

    $query = $dbconn->get_results("SELECT id,name FROM account WHERE active = 1");
    if(isset($query))
    {
    foreach($query AS $currq)
    {
    $account_id = intval($currq->id);
    $account_name = trim($currq->name);
    //Code to stuff with this data
    //NULL the variables before looping again
    $account_id = NULL;
    $account_name = NULL;
    //Unset the variables before looping again
    unset($account_id);
    unset($account_name);
    }
$query = NULL;
unset($query);
$currq = NULL;
unset($currq);

这是释放内存的正确方法吗?我读到PHP中的垃圾收集可能很懒惰,所以这就是为什么他们建议NULL 该值,因为它会立即缩小它。

我知道

这对这个网站来说可能太模糊了,但如果有人可以让我知道这是否是释放内存的正确方法?或者,如果有其他方法,您能否提供一个例子,以便我可以直观地看到它是如何工作的。提前感谢!

请阅读PHP生成器,这就是它们的用途。

您不想一次获取所有记录,这会像霰弹枪一样在您的记忆中炸出洞。

相反,您希望一次获取一条记录,

处理它,然后获取下一条记录。

下面是一个示例:

function getAccountData(PDO $pdo)
{
    $stmt = $pdo->prepare("SELECT id,name FROM account WHERE active = 1");
    $stmt->execute();
    while ($row = $stmt->fetch()) {
        yield $row;
    }
}

foreach (getAccountData($pdo) as $account){
    //process the record for each iteration
    //no need to unset anything
}

好吧,如果函数 $dbconn->get_results 返回一个包含所有数据的数组,那么使用生成器就没有意义了,因为内存已经为数据分配了。

您还可以使用 mysqli_fetch_assoc 函数一次获取一行。它应该比一次获取所有行更节省内存。http://php.net/manual/en/mysqli-result.fetch-assoc.php

相关内容

  • 没有找到相关文章

最新更新