使用 MySQLi - 更适合关闭查询

Using MySQLi - which is better for closing queries

提问人:Ross 提问时间:8/26/2008 最后编辑:Ross 更新时间:3/7/2009 访问量:868

问:

我有一个习惯,就是将变量的使用量保持在最低限度。因此,我想知道以下方法是否有任何优势:

$query = $mysqli->query('SELECT * FROM `people` ORDER BY `name` ASC LIMIT 0,30');

// Example 1
$query = $query->fetch_assoc();

// Example 2
$query_r = $query->fetch_assoc();
$query->free();

现在,如果我是对的,示例 1 应该更有效,就像我重新分配它时一样,这应该释放与之关联的任何内存。但是,有一个方法()可以释放相关的内存 - 这是一回事吗?$queryunsetMySQLi_Result::free()

如果我不调用释放与结果相关的任何内存,而是通过重新分配变量来执行相同的操作吗?我不知道如何记录这种事情 - 有人有一些想法吗?::free()unset

php mysql 内存 mysqli

评论


答:

5赞 Brian Warshaw 8/26/2008 #1

该手册似乎建议您仍应使用来释放内存。我相信原因是释放MySQL中的内存,而不是PHP中的内存。由于 PHP 无法对 MySQL 进行垃圾回收,因此需要调用 .free()free()free()

3赞 John Douthat 8/28/2008 #2

示例 1 将 $query 变量与 MySQL 结果解除关联。MySQL结果仍然存在于内存中,并将继续存在并浪费内存,直到发生垃圾回收。

示例 2 立即释放 MySQL 结果,释放已使用的资源。

但是,由于 PHP 页面的生存期通常很短,结果集很小,因此节省的内存是微不足道的。除非您在长时间运行的页面上长时间在内存中留下大量结果,否则您不会注意到速度变慢。

布莱恩 PHP可以垃圾收集MySQL结果,它只是不会立即发生。 结果存在于PHP的内存池中,而不是MySQL服务器的内存池中。

(使用无缓冲查询时,内存的位置略有不同,但它们在 PHP 中很少使用,因此不值得一提)